کدنویسی دیفنسیو(Defensive Codding)

در ابتدا با این قانون مورفی شروع کنیم :If it can happen, it will happenاگر ممکن است اتفاق بیافتد پس اتفاق خواهد افتاد.همه ما می دانیم که یک کد را به هزار شکل مختلف می توان نوشت که کار کند. اگر در رابطه با آن کمی فکر کنیم اولین چیزی که به ذهنمان می آید این است که بعضی از این روش ها نگهداری راحت تری نسبت به بقیه دارند.بعضی از آنها انعطاف بیشتری نسبت به بقیه دارند.چرا کد نویسی تدافعی؟کد دیفنسیو کدی هست که اگر خطایی به صورت ناخواسته رخ دهد کد ما می تواند هنوز به شکل صحیح به اجرای خود ادامه دهدو این شکل کد نویسی به شما در شناسایی بسیاری از خطاها در زمان کامپایل کمک خواهد کرد.کد نویسی تدافعی مجموعه ای از تکنیک هاست که رفتار کد شما را در مقابله با خطاهای زمان اجرا کنترل خواهد کرد و کد شما را در مقابل این خطا ها منعطف تر خواهد نمود و باعث تداوم اجرای صحیح آن در مقابله با خطاهای ناخواسته خواهد بود. این تکنیک از رانندگی تدافعی الهام گرفته شده است اگر کمی فکر کنید شما هرگز از اینکه در ذهن راننده مقابل شما چه می گذرد اطمینان ندارد و نمی دانید سایر راننده ها قرار هست چه کاری انجام دهند پس شما نهایت دقت را می کنید تا اگر راننده دیگر کار خطرناکی انجام دهد آسیبی به شما وارد نشود. در برنامه نویسی تدافعی هم ایده اصلی این است که اگر داده غیر مناسبی وارد کد شما شود آسیبی به کد شما نرساند حتی اگر باعث خرابی کد های دیگر شود.مزایای کدنویسی دیفنسیو:- خوانایی بالاتر و بهتر کد- افزایش کیفیت کد- نگهداری و توسعه راحت ترنکات مهم در این تکنیک که باید به آنها اهمیت دهیم:به هیچ عنوان به دیتای وارد شده توسط کاربر اعتماد نکنید:اگر بخواهیم با یک مثال این مورد را بررسی کنیم فرض کنید شما یک وبسایت مارکت آنلاین طراحی نموده اید و می خواهید محصولاتی را از طریق آن بفروشید. فرض کنید از محصول ایکس تنها 3 عدد با قیمانده و شما برای کاربر حداکثر تعداد قابل سفارش را 3 نمایش می دهید . در این حالت کابر با یک دستکاری ساده می تواند لاجیک شما را دور زده و عددی بیشتر از 3 برای شما بفرستد و شما در سمت سرور مجبور به کنترل این حالت هستید به عبارت ساده تر اینکه شما بگویید من این کنترل را در سمت کاربر انجام داده ام و چه احتیاجی به کنترل سمت سرور هست شرایط را برای یک خطا به راحتی فراهم می کند و یک تصمیم اشتباه است.به توسعه دهنده ها اعتماد نکنید:توسعه دهنده ها به سبب طرز فکر توسعه دهندگیشان در زمان توسعه نرم افزار به راحتی خطا نخواهند کرد و این می تواند باعث ایجاد خطا در آینده شود جمله کمی گیج کننده به نظر می رسد بهتر است با یک مثال به ساده کردن آن بپردازیم فرض کنید شما در لایه سرویس یک متد ایجاد کرده اید و سپس در لایه کنترلر از آین متد استفاده کرده اید و کنترل های مربوز به لاجیک(Logic) را در کنترلر انجام داده اید تا اینجا همه چیز رو به راه است ولی مشکل زمانی رخ خواهد داد که یک برنامه نویس دیگر قرار باشد از متدی که شما در لایه سرویس نوشته اید استفاده کند او ممکن است به قوانین و لاجیکی که شما نوشته بودید دقت نکند و این باعث فاجعه خواهد شد پس شما نیاز است برای متد هایی که می نویسید لاجیک مربوط به کد نوشته شده را در لایه های مختلف و مناسب کنترل نمایید تا از رخ دادن خطا جلوگیری کنید شاید در بعضی مواقع نیاز باشد پارانوئیک به قضیه نگاه کنیم. ?سعی کنید همیشه به استاندارد سالید(SOLID) پایبند باشیداصول برنامه نویسی باعث افزایش کارایی و کاهش پیچیدگی کد ما خواهند بود کد ما را خوانا تر و قابل توسعه تر خواهند کرد. زمانی که با اصول سالید به توسعه نرم افزار بپردازید در اکثر مواقع شما خواسته و یا ناخواسته از خطاها جلوگیری خواهید نمود.تست بنویسیدکد را با کد تست کردن همیشه یکی از بهترین روش هاست.زمانی که توسعه دهنده در حال تست نویسی است برای ایجاد خطا در کد تمام احتمالات را در نظر خواهد گرفت و این کار باعث کارکرد صحیح کد خواهد شد