ضدالگو

بندانگشتی|یک تراکتور قدیمی که بارها تعمیر شده است.  نمادی از ضدالگو  در مهندسی نرم‌افزار، جایی که سیستم‌ها بدون طراحی مشخص و با اصلاحات مکرر و موقتی نگهداری می‌شوند.
**ضدالگو** یا **پادالگو** (انگ‍: Anti-pattern) در مهندسی نرم‌افزار، مدیریت پروژه و فرآیندهای کسب‌وکار، یک پاسخ رایج به یک مشکل تکراری است که معمولاً ناکارآمد بوده و می‌تواند به‌شدت نتیجه‌ای معکوس داشته باشد. این اصطلاح که در سال ۱۹۹۵ میلادی توسط برنامه‌نویس کامپیوتر اندرو کونینگ ابداع شد، از کتاب الگوهای طراحی الهام گرفته شده است. این کتاب مجموعه‌ای از الگوهای طراحی نرم‌افزار را معرفی می‌کند که نویسندگان آن‌ها را قابل‌اعتماد و مؤثر می‌دانند. کونینگ این مفهوم را نخستین بار در مقاله‌ای که در مجله برنامه‌نویسی شیءگرا منتشر شد، مطرح کرد.

مقاله‌ای دیگر که در سال ۱۹۹۶ توسط مایکل آکروید در کنفرانس جهان شیء غرب‌  ارائه شد، نیز به مستندسازی ضد الگوها پرداخت. بااین‌حال، این کتاب ضد الگوها (AntiPatterns) که در سال ۱۹۹۸ منتشر شد، این ایده را محبوب کرد و دامنهٔ آن را فراتر از طراحی نرم‌افزار، به معماری نرم‌افزار و مدیریت پروژه گسترش داد. از آن زمان، نویسندگان دیگر این مفهوم را توسعه داده‌اند تا ضد الگوهای محیطی، سازمانی و فرهنگی را نیز شامل شود.

## تعریف
طبق گفتهٔ نویسندگان الگوهای طراحی، دو عنصر کلیدی وجود دارد که یک ضدالگو را از یک عادت نادرست، روش بد یا ایدهٔ غلط متمایز می‌کند:

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

برای اینکه یک رویه یا الگو به‌عنوان ضدالگو شناخته شود، باید حداقل سه بار مشاهده شده باشد. این معیار مشابه «قاعدهٔ سه‌گانه» در مورد الگوهای طراحی است که نشان می‌دهد یک الگو یا ضدالگو به‌اندازهٔ کافی رایج و تکرارشونده است.

## کاربردها
مستندسازی ضد الگوها می‌تواند روشی مؤثر برای تحلیل یک حوزهٔ مسئله و ثبت دانش تخصصی باشد.

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

## ضد الگوهای مهندسی نرم‌افزار
در مهندسی نرم‌افزار، برخی از ضد الگوهای رایج شامل موارد زیر هستند:

توپ بزرگ از گل‌ولای : نبود طراحی مشخص و سازمان‌یافته در نرم‌افزار، که منجر به کدهای آشفته و غیرقابل نگهداری می‌شود.

شیء خدا : زمانی که یک کلاس منفرد، کنترل کل برنامه را به‌جای توزیع مناسب بین چندین کلاس، بر عهده دارد.

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

شبح‌ها: کلاس‌های کنترلی موقتی که تنها به‌منظور فراخوانی متدهای دیگر کلاس‌ها ایجاد می‌شوند و معمولاً طراحی ضعیفی دارند.

### توپ بزرگ از گل‌ولای
بندانگشتی|فردی که در گل و لای ایستاده؛ نمادی از یک سیستم نرم‌افزاری بی‌ساختار که توسعه‌دهندگان را در مشکلات نگه می‌دارد.
این اصطلاح به یک سامانه نرم‌افزار اشاره دارد که فاقد معماری مشخص و قابل تشخیص است. اگرچه از دیدگاه مهندسی نرم‌افزار این وضعیت نامطلوب محسوب می‌شود، اما در عمل به دلایل مختلفی مانند فشارهای تجاری، جابه‌جایی توسعه‌دهندگان و افزایش بی‌نظمی کد (کد انتروپی) بسیار رایج است.

اصطلاح «توپ بزرگ از گل‌ولای» با مقالهٔ برایان فوت و جوزف یودر در سال ۱۹۹۷ محبوب شد. این مقاله این مفهوم را چنین تعریف می‌کند:

یک *توپ بزرگ از گل‌ولای* سیستمی نرم‌افزاری است که به‌شکل بی‌نظم، گسترده، درهم‌ریخته و مملو از وصله‌کاری رشد کرده است. این سیستم‌ها نشانه‌های واضحی از توسعهٔ بدون کنترل و تعمیرات موقتی مکرر دارند. اطلاعات در بخش‌های مختلف سیستم بدون قاعده به اشتراک گذاشته می‌شود، به‌طوری که اغلب تقریباً تمام اطلاعات مهم به‌صورت سراسری یا تکراری درمی‌آید.

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

— برایان فوت و جوزف یودر، توپ بزرگ از گل‌ولای، کنفرانس PLoP '97 / EuroPLoP '97، مونتیسلو، ایلینوی، سپتامبر ۱۹۹۷

فوت و یودر برایان ماریک را به‌عنوان نخستین فردی که این اصطلاح را برای چنین معماری‌ای به‌کار برده است، معرفی می‌کنند.

## مراجع

### چه چیزی را پشتیبانی می کند

### منابع

* 
* 
* 
* 
* 

## پانویس

رده:ضدالگوها
رده:معماری نرم‌افزار
رده:طراحی
رده:روان‌شناسی صنعتی و سازمانی
رده:رفتار سازمانی
رده:رفتار ضداجتماعی
رده:محل کار
رده:واژه‌های ابداع‌شده در ۱۹۹۵ (میلادی)