الگوهای طراحی، محاسن و معایب (Design Patterns Pros & Cons)

دوست خوبم، احسان در نوشته‏ای به بررسی مزایا و معایب الگوهای طراحی پرداخته است. در اینجا نکاتی را در تکمیل نوشته‏هایش آورده‏ام.
خلاصه:
- جایگاه الگوهای طراحی در حل مشکل طبقه‏بندی و دسته‏بندی (classification)
- تجربی بودن الگوهای طراحی
- الگوهای طراحی و استفاده مجدد
- الگوهای طراحی به مثابه فرهنگ لغت مشترک
- نقش الگوهای طراحی در آموزش طراحی شیءگرا
- تعمیم الگوهای طراحی در سایر حوزه‏ها
- ایده: حرکت به سمت کشف الگوهای مشابه در سیستمهای نرم‏افزاری مبتنی بر تئوری آشوب
- کوچک بودن الگوهای طراحی در مقابل پیچدگی و بزرگی روزافزون مسائل موجود
- نیاز به توسعه الگوها جهت پاسخگویی به مسئله
- افزایش تنوع و تعداد الگوهای طراحی
- چارلی چاپلین و یادگیری الگوهای طراحی
توضیح:
طبقه‏بندی وسیله‏ای است که ما به کمک آن دانش را مرتب می‏نماییم. اولین چیزهایی که در دوران دبستان یاد گرفتیم، طبقه‏بندی موجودات روی زمین بود. جانداران و بی‏جانها، جانداران به گیاه، حیوان و انسان دسته‏بندی می‏شوند و تا آخر.
در طراحی شیءگرایی، شناخت مشترکات بین چیزها به ما کمک می‏کند تا اشتراکات را در قالب تجریدها(abstraction) و مکانیزمها(mechanism) نشان دهیم و این کار ما را به سمت معماری کوچکتر و ساده‏تر هدایت می‏کند. متأسفانه دسته‏بندی چیزها مثلاً کلاسها، سیستمها و غیره کار ساده‏ای نیست. فاکتورهای زیادی در شناخت و دسته‏بندی اجزای راه حل وجود دارند. از این رو در تحلیل و طراحی شیءگرایی مانند خیلی از حوزه‏های مهندسی، مجموعه‏ای از توصیه‏ها، راهنمایی‏ها و قواعد سرانگشتی جهت دسته‏بندی اجزای مسئله (مثلاً کلاسها و اشیا) وجود دارد. شناخت کلاسها، اشیاء و کلاً اجزای راه حل یکی از مشکلترین بخشهای تحلیل و طراحی شیءگرایی است.
شناسایی اجزا، هم شامل کشف و هم شامل ابتکار و نوآوری است. در پروسه کشف، تجریدهای موجود در مسئله شناسایی شده و در پروسه نوآوری، تغییر شکل تجریدها به شکلی که جواب مسئله داده شود، صورت می‏گیرد. نکته جالب آن که کشف و ابتکار هر دو با مشکل طبقه‏بندی و دسته‏بندی مواجه هستند.
یکی از مهمترین نکات مثبت الگوهای طراحی کمک آنها به مشکل کشف کلاسها و المانهای راه حل و کمک به توسعه ابتکاری است که در الگو وجود دارد. به عنوان مثال اگر مسئله‏ای با الگوی سازگارساز(Adpater) حل می‏شود، شناخت اجزای راه حل انجام شده و شما باید ابتکار موجود در الگو را برای تطابق با مسئله واقعی خود توسعه دهید.
یکی دیگر از نکات مثبت دیگر در الگوهای طراحی این است که آنها ماحصل تجربه‏اند و نه مباحث آکادمیک. به عبارت دیگر برای خلق یک الگو، لازم نیست شما در آزمایشگاههای مهندسی نرم‏افزار به دنبال کشف نمونه‏ای جدیدی از آن باشید، بلکه باید در حین تجربه و انجام کار، حواستان به گذشته‏تان باشد یا به آینده؛ و طرح این سئوال که آیا من درگذشته این مسئله را حل کرده‏ام؟ آیا مسئله‏ای که با آن روبرو هستم دیگر بار ممکن است تکرار شود؟ به عنوان مثال در سیستمهای انبار و اتوماسیون اداری خیلی اوقات نیاز است که شما کاربر را از اتفاقاتی مطلع نمایید بدون آن که کاربر تعامل خاصی با سیستم داشته باشد(Notification یا هشدار). خوب به راحتی می‏توان دید که این مسئله، عمومی و تکرارپذیر است. آیا نمی‏توان یکبار برای همیشه حالت عمومی آن را حل کرد؟ ناگفته پیداست که شعار الگوها که "کسی قبلاً مسئله شما را حل کرده است"  عینیت پیدا خواهد کرد. جمله زیبای الکساندر شنیدنی است: "هر الگو علاوه بر آن که مسئله‏ای را بیان می‏کند که بارها و بارها درمحیطمان اتفاق افتاده است، راه حل عمومی به آن را نیز بیان می‏دارد. در چنین حالتی می‏توان این راه حل را میلیونها بار استفاده کرد، بدون آنکه بخواهیم آن را حتی دوبار به یک شکل انجام دهیم." به همین دلیل است که الگوهای طراحی یکی از روشهای استفاده مجدد کاربردی و مفید در مهندسی نرم‏افزار هستند.
الگوهای طراحی نقش بسیار مهمی به عنوان زبان مشترک تیم تولید نرم‏افزار ایفا می‏کنند. وقتی که در جلسه طراحی یا در ارائه طراحی خود نام یکی از الگوها را می‏برید، نیازی به توضیح اضافه نخواهد بود. شاید بد نباشد که بگوییم هرالگوی طراحی برابر است با 1024 کلمه 03.gif
یکی دیگر از محاسن الگوهای طراحی، کمک بی‏شائبه آنها در آموزش طراحی شیءگراست. یادم است که هر بار از احسان می‏پرسیدم که بیا با هم فکر کنیم که چگونه طراحی شیءگرا را به دانشجویان یاد دهیم، تأکید می‏کرد که اول یک سری مقدمات گفته شود و بعد الگوهای طراحی ارائه گردد. (در ادامه توضیح بیشتر خواهم داد) به عبارت دیگر برای اینکه تفکر طراحان و حتی برنامه‏نویسان را به سمت تفکر شیءگرا سوق دهید، یکی از بهترین ابزارها، الگوهای طراحی هستند.
من کاملاً با نظر احسان که وی آن را "بازبه‏کارگیری مفهوم"  یا " بازبه‏کارگیری ایده" می‏نامد، موافقم. انسان ناشناخته‏ها را از روی شناخته‏ها، می‏شناسد. مسائل جدید را با استفاده از تجربیات قبلی حل می‏کند. وقتی کاری را تکرار می‏کنید، می‏شود رفتار. وقتی رفتار را تکرار می‏کنید، می‏شود خصیصه شما. وقتی که خصایص را تکرار کنید، می‏شوند بخشی از شخصیت شما. استفاده درست از الگوهای طراحی، ذهن شما ساختارمند و سازمان‏یافته می‏نماید تا آن جا که از آنها برای حل سایر مسایل نیزاستفاده می‏کنید حتی برای حل مسائل روزمره زندگی‏تان. گاهی شما نقش سازگارساز(Adpater)‏ را بین دو عضو خانواده یا دو دوست را بازی می‏کنید. گاهی به جای خرید روزانه روزنامه، از الگوی Observer برای حل مشکلتان استفاده می‏کنید و مشترک روزنامه می‏شوید.
ایده: نکته جالب دیگر آنکه دوستانی که با تئوری و سیستمهای آشوب (Chaos Theory) آشنا هستند - به عنوان نمونه فراکتالها نمونه‏ای از سیستمهای آشوبند- به خوبی می‏دانند که یکی از مهم‏ترین خصوصیات این گونه سیستمها داشتن الگوهای خودمانا است. به عنوان مثال فراکتالها که ظاهری بسیار پیچیده دارند دارای الگوهایی با فرمولهای ساده ریاضی‏اند. کسی چه می‏داند، شاید سیستمهایی که ما با آنها درگیر هستیم، دارای الگوهای بسیار ساده‏ای هستند که چنانچه کشف شوند، تأثیری شگرف بر نگاه ما در تحلیل و طراحی خواهند داشت. این موضوع را از آن جهت عرض می‏کنم که هر جایی که انسان حضور داشته باشد به عنوان مثال سازمانها، موضوع سیستم آشوب است.  بخش عظیمی از نرم‏افزارهای ما در جهت تسریع و تسهیل کار این گونه سازمانها است. جمله من خیلی تخیلی و بعید به نظر می‏رسد ولی فکر کنم چیزهایی که ما امروز داریم تا همین چند سال پیش برایمان قابل باور نبود.

اما با همه نکات مثبت و مزایای الگوهای طراحی، ایراداتی نیز به آن وارد است. شاید بهتر است بگوییم که الگوهای طراحی به تنهایی کافی نیستند.
یکی از مهم‏ترین ایراداتی که به الگوهای طراحی می‏توان گرفت، ریزدانه بودن آنها در مقایسه با مسائل بزرگ و پیچیده‏ای است که ما با آنها مواجه هستیم. سطح مسئله‏ای که آنها مورد هدف قرار می‏دهند خیلی کوچکتر از مسائلی است که ما با آنها روبرو هستیم. هر چند الگوهای دیگری مانند الگوهای معماری وجود دارند که این معضل را تا حدی، تسکین می‏بخشند.
نکته قابل توجه دیگر این است که الگوهای طراحی به خودی خود جواب مسئله شما نیستند بلکه آن را در یک سطح عمومی حل می‏کنند. لذا شما نیاز به توسعه و تطابق آن با مسئله‏ای که با آن روبرو هستید، خواهید داشت.
یکی دیگر از معضلاتی که به شدت استفاده از الگوهای طراحی را به خطر می‏اندازد، تنوع و ازدیاد آنهاست(منظور الگوهای پایه طراحی گاما نیست، بلکه تمامی الگوهای طراحی موجود در تولید نرم‏افزار است- اینجا را مشاهده کنید). جهت مقایسه اجازه دهید مثالی ذکر کنیم. در دنیای زبان و نوشتار، شما با انبوهی از کلمات و اصطلاحات روبرو هستید که هر یک به نوبه خود، بسیار مفید هستند. اما آیا ما با همه لغاتی که در فرهنگ لغت وجود دارد، گفته‏ها و نوشته‏هایمان را بیان می‏کنیم. مسلماً نه. علت این امر، نامفید بودن سایر لغات نیست، بلکه تنوع و تعداد زیاد آنهاست و شما در هر مقطع از زمان، با یک سری از آنها، نظراتتان را بیان می‏کنید. این موضوع در مورد الگوهای طراحی و کلاً در مورد تکنیکها صادق هستند. به علت تعداد زیاد آنها، استفاده از آنها چیزی شبیه به استفاده از کلمات فرهنگ لغت خواهد بود.
الگوهای طراحی هر چند مکانیزم خیلی خوبی برای آموزش و حتی طراحی هستند ولی کافی نیستند. مفاهیم، اصول و معیارهایی در طراحی مهم هستند که بر همه جوانب آن و از جمله الگوهای طراحی غالب هستند. یادگیری و آموزش این گونه موارد، مقدم است بر الگوهای طراحی. به عبارت دیگر با الگوهای طراحی شما با یک سری مسائل از قبل حل شده و کاربرد آن آشنا خواهید شد ولی اگر برای مسئله‏ای که در الگو مطرح شده، جواب جدیدی ارائه شود، آیا می‏توانید این جواب را با جواب قبلی مقایسه کنید.
در آموزش الگوهای طراحی یکی از اولین اتفاقاتی که می‏افتد، اتفاقی است که برای چارلی چاپلین در فیلم عصر جدید افتاد. چارلی در این فیلم از بس که با آچار، پیچها را سفت کرده بود، از خط مونتاژ که خارج شد، هر جا که چیزی شبیه به پیچ پیدا می‏کرد، شروع می‏کرد به سفت کردنش.03.gif یادگیری الگوهای طراحی (مانند خیلی موضوعات دیگر)، یادگیرنده علاقه‏مند را مانند چارلی می‏کند. عدم ممارست در استفاده از آنها و تبدیل دانسته به ساختار فکری یکی از مهمترین چالشهای استفاده از الگوهای طراحی است(البته همه موضوعات جدیدی که می‏آموزیم)

آنچه ذهن مرا درگیر کرده این است که الگوهای طراحی برای حل مسائل تکرار شونده است. اگر می‏توانستیم سطح این الگوها را افزایش دهیم یا الگوهایی برای کنترل تغییرات ارائه دهیم، خیلی عالی می‏شد.

گزیده: آنچه جذاب است سهولت نيست، دشواري هم نيست، بلكه دشواري رسيدن به سهولت است.


مطالب مشابه :


الگوهای طراحی و معماری-2

من ،نرم افزار و زندگی . الگوهای طراحی و معماری-2. Domain Logic. Domain Model – بخش اول :




الگو های طراحی (Design Pattern)

مهندسی نرم افزار معماری در این رشته به صورت صحیح جواب می دهد آیا می توان الگوهای را




الگوهای معماری(Architectual Patterns) -مدل های مرجع(Reference Models) - معماری های مرجع(Reference Ar

الگوهای معماری(Architectual Patterns) بین اجزا نرم افزار نگاشت شده است.از آنجا که یک مدل مرجع




الگوهای طراحی، محاسن و معایب (Design Patterns Pros & Cons)

مهندسی نرمافزار به دنبال کشف نمونه مانند الگوهای معماری وجود دارند که




الگوهای طراحی(desing pattern)

در مهندسی نرم افزار یک الگوی طراحی های طراحی معماری در این رشته به الگوهای طراحی :




برنامه نویسی شی گرا - Object Oriented Programming

فرآیند توسعه نرم افزار الگوهای طراحی Design Pattern. انواع معماری های تولید نرم افزار :




بررسي و شناخت متدولوژي RUP

معماری نرم افزار مطابق نظر آقای Kruchen در معماری 4+1 از • تعیین الگوهای موجود و الگوهایی که




یک دوره آموزش کامل RUP

مفاهیم معماری نرم افزار شامل معماری نرمافزار، مدل مرجع، پیش ران‌های معماری، الگوهای




مهندسی نرم افزار

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




این طرح برنده مسابقه طراحی معماری اندونزی شد

دانلود مقاله نرم افزار این طراحی با توجه به الگوهای معماری شهر جاکارتا، مصالح بومی در




برچسب :