
آموزش کدنویسی تدافعی (Defensive Coding) در سی شارپ
آموزش کدنویسی تدافعی (Defensive Coding) در سی شارپ یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی کدنویسی تدافعی در سی شارپ است که با نام اصلی Defensive Coding in C#.NET از شرکت Pluralsight منتشر شده است.
برنامه نویسی تدافعی (Defensive Programing) چیست؟
Defensive Programming یک روش برنامه نویسی و کد نویسی است که در آن سعی می شود برنامه در مقابل شرایط غیرقابل انتظار و غیرقابل پیش بینی رفتار مناسب و قابل پیش بینی از خود نشان دهد. مباحث مربوط به Clean Code نقش بسیار مهمی در برنامه نویسی تدافعی ایفا می کنند. علاوه بر این، مباحث مربوط به SOLID در برنامه نویسی تدافعی بسیار اهمیت دارند.
در واقغ در Defensive Programming، ما سعی می کنیم که برنامه با دریافت کردن ورودی های غیرمناسب چه از سمت کاربر چه از سمت متدهای دیگر برنامه رفتار مناسبی از خود نشان دهد. قابل پیش بینی بودن رفتار برنامه (Predictability) یکی از موضوعات بسیار مهم در کدنویسی تدافعی می باشد. رفتار مناسب برنامه در شرایط غیر مساعد از قبیل از بین رفتن اتصال به شبکه، قطع شدن ارتباط با بانک اطلاعاتی و ... در برنامه نویسی تدافعی مورد اهمیت قرار می گیرد.
اصول کدنویسی تدافعی در C# برای کاهش خطاهای نرمافزاری
کدنویسی تدافعی رویکردی در توسعه نرمافزار است که هدف آن جلوگیری از رفتارهای نامعتبر و مدیریت شرایط غیرمنتظره پیش از تبدیل شدن آنها به خطاهای جدی است. در C#، این رویکرد میتواند از بررسی ورودیهای متدها تا اطمینان از معتبر بودن وضعیت اشیا را شامل شود. برنامهنویس با مشخص کردن پیششرطها و محدودیتهای هر بخش، احتمال استفاده نادرست از کد را کاهش میدهد و رفتار برنامه را در شرایط مختلف قابل پیشبینیتر میکند.

یکی از نکات مهم در این رویکرد، فرض نکردن این است که تمام ورودیها همیشه معتبر هستند یا سایر بخشهای برنامه دقیقاً مطابق انتظار عمل میکنند. حتی متدی که در شرایط عادی عملکرد درستی دارد، ممکن است با مقدار Null، ورودی نامعتبر یا وضعیت ناسازگار روبهرو شود. بررسی این شرایط و تعریف رفتار مناسب برای آنها، به افزایش پایداری نرمافزار کمک میکند. استفاده از اصول کدنویسی تدافعی در پروژههای C# بهویژه زمانی اهمیت دارد که کد میان چند بخش یا چند توسعهدهنده مشترک باشد.
اعتبارسنجی ورودیها و تعریف قرارداد برای متدها
هر متد در یک برنامه نرمافزاری، ورودیها و خروجیهای مشخصی دارد که رفتار مورد انتظار آن را تعیین میکنند. اگر این قراردادها بهروشنی تعریف نشوند، استفاده نادرست از متد میتواند به خطاهای دشوار برای تشخیص منجر شود. در C#، برنامهنویس میتواند با بررسی آرگومانها، اعتبارسنجی مقادیر و مشخص کردن شرایط مجاز، از ورود دادههای نامعتبر به منطق اصلی جلوگیری کند. این کار باعث میشود مسئولیتها و محدودیتهای هر متد روشنتر باشند.
اعتبارسنجی مناسب باید با هدف متد و قواعد دامنه برنامه هماهنگ باشد. برای مثال، متدی که انتظار یک مقدار مثبت دارد، نباید بدون بررسی مقادیر نامعتبر را بپذیرد و سپس در مراحل بعدی با خطا مواجه شود. مشخص کردن رفتار متد در چنین شرایطی، استفاده از آن را برای سایر توسعهدهندگان آسانتر میکند. طراحی قراردادهای روشن همچنین به نوشتن تستهای دقیقتر کمک میکند، زیرا میتوان رفتار متد را برای ورودیهای معتبر و نامعتبر بهصورت جداگانه بررسی کرد.
مدیریت Exception و نتایج قابل پیشبینی در C#
مدیریت خطا یکی از بخشهای مهم کدنویسی تدافعی است، زیرا هیچ برنامهای از مواجهه با شرایط نامطلوب کاملاً مصون نیست. در C#، Exception برای نمایش شرایط استثنایی استفاده میشود، اما پرتاب خطا برای هر وضعیت قابل پیشبینی همیشه انتخاب مناسبی نیست. برنامهنویس باید مشخص کند کدام شرایط واقعاً استثنایی هستند و کدام موارد را میتوان با بررسی ورودیها یا بازگرداندن نتیجهای مشخص مدیریت کرد. این تفکیک به خوانایی کد و درک بهتر جریان اجرای برنامه کمک میکند.

نتایج قابل پیشبینی باعث میشوند فراخواننده یک متد بتواند رفتار آن را در شرایط مختلف مدیریت کند. برای نمونه، اگر عملیاتی به دلیل نامعتبر بودن ورودی انجامپذیر نباشد، متد باید مطابق قرارداد تعریفشده واکنش نشان دهد و اطلاعات لازم را در اختیار فراخواننده قرار دهد. همچنین، مدیریت مناسب Exceptionها به جلوگیری از پنهان شدن خطاها یا نمایش اطلاعات نامناسب کمک میکند. توجه به این اصول در طراحی متدها و ساختارهای مختلف C#، نگهداری و عیبیابی نرمافزار را آسانتر میکند.
تست خودکار و بررسی رفتار کد در شرایط مختلف
تست خودکار یکی از ابزارهای مهم برای بررسی صحت رفتار برنامه و جلوگیری از بازگشت خطاهای قبلی است. در کدنویسی تدافعی، تستها میتوانند علاوه بر مسیرهای عادی اجرا، ورودیهای نامعتبر و شرایط مرزی را نیز بررسی کنند. این روش به توسعهدهنده کمک میکند مشخص کند کد در مواجهه با مقادیر غیرمنتظره چگونه رفتار میکند و آیا قراردادهای تعریفشده برای متدها رعایت میشوند یا خیر. چنین بررسیهایی بهویژه در بخشهایی از برنامه که با دادههای حساس یا منطق پیچیده سروکار دارند، اهمیت دارند.
ترکیب تست خودکار با Assertها امکان بررسی فرضیات و شرایط مورد انتظار در نقاط مختلف برنامه را فراهم میکند. تستها میتوانند نشان دهند که یک تغییر جدید، رفتار قبلی و مورد انتظار را مختل کرده است یا خیر. البته Assert و تست خودکار جایگزین اعتبارسنجی ورودیهای واقعی یا مدیریت خطاهای زمان اجرا نیستند؛ هرکدام نقش مشخصی در کنترل کیفیت نرمافزار دارند. استفاده درست از این ابزارها به برنامهنویس کمک میکند مشکلات را زودتر شناسایی کند و با اطمینان بیشتری کد را تغییر دهد.
سرفصل مطالب آموزش کدنویسی تدافعی Defensive Coding در سی شارپ
فصل اول: مقدمه- مقدمه
- کدنویسی تدافعی چیست؟
- کد تمیز
- کدهای قابل تست و Unit Test ها
- کد قابل پیش بینی
- موضوع ها
- مقدمه
- متدهای قابل پیش بینی، قابل تست و تمیز
- مثالی از متدهای قابل پیش بینی، قابل تست و تمیز
- ساخت یک Class Library
- آموزش عملی متدهای قابل پیش بینی، قابل تست و تمیز
- آموزش عملی Named Argument ها
- جمع بندی
- مقدمه
- Validate کردن پارامترهای متدها
- آموزش علمی Validate کردن پارامترهای متدها
- Overload کردن متدها
- جمع بندی
- مقدمه
- پدیده ی وقت کافی برای نوشتن Test ندارم!
- تفاوت روش Code First و Test First
- تعریف Unit Test Case ها
- ساخت Unit Test ها
- استفاده از Test Explorer
- تولید خودکار Unit Test ها
- Unit Test ها و Exception ها
- Dependency ها
- جمع بندی
- مقدمه
- Method Result ها
- آموزش عملی برگرداندن یک مقدار
- آموزش عملی برگرداندن یک Exception
- آموزش عملی برگرداندن چندین مقدار
- برگرداندن Null
- جمع بندی
- مقدمه
- تعریف متغیرهای محلی
- جملات If
- جملات Switch
- Enum ها
- مبحث Casting
- جمع بندی
- مقدمه
- آموزش عملی آماده سازی پروژه ی نمونه
- Assert ها
- خطاهای پیش بینی شده
- خطاهای پیش بینی نشده و Global Exception Handler
- مبحث Exception Handling
- جمع بندی
- مقدمه
- کدهای موروثی (Legacy Code)
- اطلاعات بیشتر
- جمع بندی







