ضد الگوها در توسعه نرم‌افزار چه‌ هستند؟


ساختار خوب یک نرم‌افزار برای گسترش و نگهداری یک سیستم ضروری است. توسعه نرم‌افزار یک فعالیت بی‌نظم و پراکنده است، بنابراین ساختار اجرای سیستم‌ها از ساختار برنامه ریزی شده متناسب با معماری ، تجزیه و تحلیل و طراحی، منحرف می شود.تغییر ساختار نرم‌افزار، یک روش مؤثر برای بهبود ساختار نرم‌افزار است.

همیشه در هر کاری سعی کنید خودتان را به چالش بکشید و از خودتان انتقاد کنید تا بتوانید پیشرفت داشته باشید،‌ یک برنامه‌نویس خوب هم باید از همین الگو پیروی کند و این کار را انجام دهد.ضد الگوها یا Anti Patterns، یک سری روند و راه نامناسب هستند، که وقتی یک برنامه‌نویس قصد دارد مسئله‌های مختلف را حل کند، آن‌ها را پیاده‌سازی می‌کند و معمولا همین الگو‌ها و روندها است که باعث ایجاد مشکل در ساختار برنامه می‌شود.

ساختار خوب یک برنامه به توسعه پذیری و نگهداری آن کمک می‌کند، اما متاسفانه می‌بینیم که اکثراً سرعت تحویل پروژه را به معماری نرم‌افزار ترجیح می‌دهند و برای ساخت یک برنامه بسیار بی‌نظم کار می‌کنند، همچنین بسیار زیاد می‌بینیم که شرکت‌ها برای کاهش هزینه‌های خودشان از برنامه‌نویس‌های بدون تجربه استفاده کرده و از بسیاری از مراحل توسعه نرم‌افزار مثل … چشم‌پوشی می‌کنند؛(البته به کار گیری نیروهای تازه کار بسیار خوب است، اما به شرط وجود نیروهای باتجربه و کار کردن در کنار آن‌ها) این کارها باعث می‌شود که کار بی‌کیفیت از آب دربیاید. به این نکته توجه کنید که هزینه‌ای که در ابتدا برای نوشتن یک برنامه خوب می‌دهید تا کیفیت کارتان را بالا می‌برید، از بسیاری از هزینه‌های شما در آینده جلوگیری می‌کند؛ پس این مسأله را شوخی نگیرید.

اما اگر ما این ضد الگو‌ها رو بشناسیم، می‌فهمیم که چه الگویی برای ساخت یک برنامه اشتباه است! مثلا اگر یک برنامه نویس، کلاسی بنویسد، که کارهای زیادی داخل این کلاس انجام شود به طور مثال آپلود عکس، دسترسی دادن به کاربران، مدیریت خطا، نمایش تصویر و اعتبار سنجی، منجر به یه ضد الگو به اسم Blob) God Object ) می‌شود.

مثال:

class GodObject {  
    function PerformInitialization() {}
    function ReadFromFile() {}
    function WriteToFile() {}
    function DisplayToScreen() {}
    function PerformCalculation() {}
    function ValidateInput() {}
    // and so on... //
}

این باعث می‌شود که به طور مثال با تغییر یک قسمت از یک تکه کد در برنامه، نیاز به تغییر قسمت‌های دیگر در برنامه باشد؛ این کار در توسعه یک نرم افزار قابل قبول نیست و ممکن است برنامه‌نویس نتواند از کدهای برنامه، استفاده مجدد(Reuse) کند.همچنین بارگزاری این کلاس در حافظه اصلی (RAM) می‌تواند حجم زیادی از فضای RAM را اشغال کند.
یکی دیگر از این ضدالگو‌ها Lava Flow یا جریان گدازه‌ها است. شاید شما هم با این مسأله برخورد کرده‌اید که برنامه‌نویسان در هنگام کار روی یک پروژه از روش‌های بسیار پیچیده استفاده می‌کنند، چرا که فقط روی خروجی آن متمرکز هستند و به مسائل دیگر اهمیتی نمی‌دهند؛ اما هنگامی که برنامه‌نویسان جدیدی وارد پروژه شوند از این نوع کدنویسی شکه می‌شوند، درواقع آن‌ها اصلاً از چیزی که نوشته شده سر در نمی‌آورند یا اگر هم بفهمند، بسیار زمان خواهد برد.
از طرفی این کدها دستکاری هم نمی‌شوند، زیرا همه ترس دارند که با تغییر قسمتی از کدها،‌ کل پروژه از کار بیفتد. رفته‌رفته جای این کدها محکم می‌شود و ضد الگو Lava Flow یا جریان گدازه‌‌ها رخ خواهد داد. جای این گدازه‌ها بسیار محکم است و کسی هم قادر به تغییر آن نیست؛ اگر که برنامه نویسی اصلی نباشد.
راه جلوگیری از این ضدالگو،‌پیروی از یک روش استاندارد برای کد نویسی است! ( ساده و قابل بفهم کد بنویسید ، پیچیده کدنویسی کردن هنر نیست.)

برخی دیگر از این ضد الگو‌ها به شرح زیر هستند :


Death by Planning
Big Ball of Mud
Boat Anchor
Golden Hammer
Gold Plating

سعی کنید برای پیشرفت کردن و حرفه ای شدن در این حوزه، اصولی کار کنید و این نکات را رعایت کنید؛ همچنین به کیفیت کدی که تولید می‌کنید اهمیت زیادی بدهید.