ضدالگو

یک ضدالگو (انگ: Anti-pattern) در مهندسی نرمافزار، مدیریت پروژه و فرآیندهای کسبوکار، یک پاسخ رایج به یک مشکل تکراری است که معمولاً ناکارآمد بوده و میتواند بهشدت نتیجهای معکوس داشته باشد.[۱][۲] این اصطلاح که در سال ۱۹۹۵ میلادی توسط برنامهنویس کامپیوتر اندرو کونینگ ابداع شد، از کتاب الگوهای طراحی الهام گرفته شده است. این کتاب مجموعهای از الگوهای طراحی نرمافزار را معرفی میکند که نویسندگان آنها را قابلاعتماد و مؤثر میدانند. کونینگ این مفهوم را نخستین بار در مقالهای که در مجله برنامهنویسی شیءگرا منتشر شد، مطرح کرد.[۳]
مقالهای دیگر که در سال ۱۹۹۶ توسط مایکل آکروید در کنفرانس جهان شیء غرب [الف] ارائه شد، نیز به مستندسازی ضد الگوها پرداخت. بااینحال، این کتاب ضد الگوها (AntiPatterns) که در سال ۱۹۹۸ منتشر شد، این ایده را محبوب کرد و دامنهٔ آن را فراتر از طراحی نرمافزار، به معماری نرمافزار و مدیریت پروژه گسترش داد. از آن زمان، نویسندگان دیگر این مفهوم را توسعه دادهاند تا ضد الگوهای محیطی، سازمانی و فرهنگی را نیز شامل شود.[۳][۴]
تعریف
[ویرایش]طبق گفتهٔ نویسندگان الگوهای طراحی ، دو عنصر کلیدی وجود دارد که یک ضدالگو را از یک عادت نادرست، روش بد یا ایدهٔ غلط متمایز میکند:
- ضدالگو یک فرایند، ساختار یا الگوی عملی رایج است که، با وجود اینکه در ابتدا به نظر میرسد پاسخی مناسب و مؤثر به یک مشکل باشد، در نهایت پیامدهای منفی آن از مزایای آن بیشتر است.
- راهحل دیگری برای مشکل موردنظر وجود دارد که ضدالگو قصد دارد آن را حل کند. این راهحل مستند شده، تکرارپذیر و ثابتشده است که در مقایسه با ضدالگو، اثربخشتر است.
برای اینکه یک رویه یا الگو بهعنوان ضدالگو شناخته شود، باید حداقل سه بار مشاهده شده باشد. این معیار مشابه «قاعدهٔ سهگانه» در مورد الگوهای طراحی است که نشان میدهد یک الگو یا ضدالگو بهاندازهٔ کافی رایج و تکرارشونده است.[۵]
کاربردها
[ویرایش]مستندسازی ضد الگوها میتواند روشی مؤثر برای تحلیل یک حوزهٔ مسئله و ثبت دانش تخصصی باشد.[۶]
درحالیکه برخی از توصیفهای ضدالگو فقط به مستندسازی پیامدهای منفی آن میپردازند، مستندسازی مناسب ضدالگو نهتنها مشکلات آن را بیان میکند، بلکه راهحلی جایگزین یا روشی برای کاهش اثرات منفی آن را نیز ارائه میدهد.[۷]
ضد الگوهای مهندسی نرمافزار
[ویرایش]در مهندسی نرمافزار، برخی از ضد الگوهای رایج شامل موارد زیر هستند:
توپ بزرگ از گلولای [ب]: نبود طراحی مشخص و سازمانیافته در نرمافزار، که منجر به کدهای آشفته و غیرقابل نگهداری میشود.
شیء خدا [پ]: زمانی که یک کلاس منفرد، کنترل کل برنامه را بهجای توزیع مناسب بین چندین کلاس، بر عهده دارد.
اعداد جادویی: مقادیر عددی خاصی که بدون توضیح مشخص در کد استفاده میشوند یا چندین بار تکرار میشوند، درحالیکه میتوانند با یک ثابت نامگذاریشده جایگزین شوند.
شبحها[ت]: کلاسهای کنترلی موقتی که تنها بهمنظور فراخوانی متدهای دیگر کلاسها ایجاد میشوند و معمولاً طراحی ضعیفی دارند.[۷]
توپ بزرگ از گلولای
[ویرایش]
این اصطلاح به یک سامانه نرمافزار اشاره دارد که فاقد معماری مشخص و قابل تشخیص است. اگرچه از دیدگاه مهندسی نرمافزار این وضعیت نامطلوب محسوب میشود، اما در عمل به دلایل مختلفی مانند فشارهای تجاری، جابهجایی توسعهدهندگان و افزایش بینظمی کد (کد انتروپی[ث]) بسیار رایج است.
اصطلاح «توپ بزرگ از گلولای» با مقالهٔ برایان فوت و جوزف یودر در سال ۱۹۹۷ محبوب شد.[ج] این مقاله این مفهوم را چنین تعریف میکند:
یک توپ بزرگ از گلولای سیستمی نرمافزاری است که بهشکل بینظم، گسترده، درهمریخته و مملو از وصلهکاری رشد کرده است. این سیستمها نشانههای واضحی از توسعهٔ بدون کنترل و تعمیرات موقتی مکرر دارند. اطلاعات در بخشهای مختلف سیستم بدون قاعده به اشتراک گذاشته میشود، بهطوری که اغلب تقریباً تمام اطلاعات مهم بهصورت سراسری یا تکراری درمیآید.
ساختار کلی سیستم ممکن است از ابتدا هم بهخوبی تعریف نشده باشد. حتی اگر چنین بوده، ممکن است به مرور زمان فرسوده و نامشخص شده باشد. برنامهنویسانی که حداقلی از درک معماری دارند، از این آشفتگی دوری میکنند. تنها کسانی که به معماری نرمافزار بیتفاوتاند یا به روزمرگی وصلهکاریهای بیپایان عادت دارند، در اینگونه سیستمها احساس راحتی میکنند.
— برایان فوت و جوزف یودر، توپ بزرگ از گلولای، کنفرانس PLoP '97 / EuroPLoP '97، مونتیسلو، ایلینوی، سپتامبر ۱۹۹۷
فوت و یودر برایان ماریک را بهعنوان نخستین فردی که این اصطلاح را برای چنین معماریای بهکار برده است، معرفی میکنند.[۸]
مراجع
[ویرایش]چه چیزی را پشتیبانی می کند
[ویرایش]- ↑ Budgen 2003, p. 225.
- ↑ Ambler 1998, p. 4.
- ↑ ۳٫۰ ۳٫۱ Neill, Laplante & DeFranco 2011, p. 4.
- ↑ Neill, Laplante & DeFranco 2011, p. 5.
- ↑ Neill, Laplante & DeFranco 2011, p. 6.
- ↑ Jimenez 2006.
- ↑ ۷٫۰ ۷٫۱ Demeyer 2008, p. 102.
- ↑ Foote, Brian; Yoder, Joseph (26 June 1999). "Big Ball of Mud". laputan.org. Retrieved 14 April 2019.
منابع
[ویرایش]- Budgen, D. (2003). Software design. Harlow, Eng.: Addison-Wesley. p. 225. ISBN 0-201-72219-4.
As described in Long (2001), design anti-patterns are 'obvious, but wrong, solutions to recurring problems'.
- Ambler, Scott W. (1998). Process patterns: building large-scale systems using object technology. Cambridge, UK: Cambridge University Press. p. 4. ISBN 0-521-64568-9.
...common approaches to solving recurring problems that prove to be ineffective. These approaches are called antipatterns.
- Jimenez, Edward (2006-04-24). "AntiPatterns". AntiPatterns. Retrieved 24 April 2006.
- Demeyer, Serge (2008). "ObjectOriented Reengineering". In Mens, Tom; Demeyer, Serge (eds.). Software Evolution. Springer Science + Business Media. ISBN 9783540764403.
پانویس
[ویرایش]- ↑ Object World West
- ↑ Big Ball of Mud
- ↑ God Object
- ↑ در برنامه نویسی کامپیوتری، یک poltergeist (فارسی: شبح) یک شی با عمر کوتاه و معمولاً بدون حالت است که برای انجام مقداردهی اولیه یا فراخوانی روشها در کلاس دیگر و دائمیتر استفاده میشودد.
- ↑ تخریب، زوال، یا از دست دادن استفاده یا عملکرد نرم افزار در طول زمان است.
- ↑ Brian Foote and Joseph Yoder's 1997