الگوهای طراحی، محاسن و معایب (Design Patterns Pros & Cons)
دوست خوبم، احسان در نوشتهای به بررسی مزایا و معایب الگوهای طراحی پرداخته است. در اینجا نکاتی را در تکمیل نوشتههایش آوردهام.
خلاصه:
- جایگاه الگوهای طراحی در حل مشکل طبقهبندی و دستهبندی (classification)
- تجربی بودن الگوهای طراحی
- الگوهای طراحی و استفاده مجدد
- الگوهای طراحی به مثابه فرهنگ لغت مشترک
- نقش الگوهای طراحی در آموزش طراحی شیءگرا
- تعمیم الگوهای طراحی در سایر حوزهها
- ایده: حرکت به سمت کشف الگوهای مشابه در سیستمهای نرمافزاری مبتنی بر تئوری آشوب
- کوچک بودن الگوهای طراحی در مقابل پیچدگی و بزرگی روزافزون مسائل موجود
- نیاز به توسعه الگوها جهت پاسخگویی به مسئله
- افزایش تنوع و تعداد الگوهای طراحی
- چارلی چاپلین و یادگیری الگوهای طراحی
توضیح:
طبقهبندی وسیلهای است که ما به کمک آن دانش را مرتب مینماییم. اولین چیزهایی که در دوران دبستان یاد گرفتیم، طبقهبندی موجودات روی زمین بود. جانداران و بیجانها، جانداران به گیاه، حیوان و انسان دستهبندی میشوند و تا آخر.
در طراحی شیءگرایی، شناخت مشترکات بین چیزها به ما کمک میکند تا اشتراکات را در قالب تجریدها(abstraction) و مکانیزمها(mechanism) نشان دهیم و این کار ما را به سمت معماری کوچکتر و سادهتر هدایت میکند. متأسفانه دستهبندی چیزها مثلاً کلاسها، سیستمها و غیره کار سادهای نیست. فاکتورهای زیادی در شناخت و دستهبندی اجزای راه حل وجود دارند. از این رو در تحلیل و طراحی شیءگرایی مانند خیلی از حوزههای مهندسی، مجموعهای از توصیهها، راهنماییها و قواعد سرانگشتی جهت دستهبندی اجزای مسئله (مثلاً کلاسها و اشیا) وجود دارد. شناخت کلاسها، اشیاء و کلاً اجزای راه حل یکی از مشکلترین بخشهای تحلیل و طراحی شیءگرایی است.
شناسایی اجزا، هم شامل کشف و هم شامل ابتکار و نوآوری است. در پروسه کشف، تجریدهای موجود در مسئله شناسایی شده و در پروسه نوآوری، تغییر شکل تجریدها به شکلی که جواب مسئله داده شود، صورت میگیرد. نکته جالب آن که کشف و ابتکار هر دو با مشکل طبقهبندی و دستهبندی مواجه هستند.
یکی از مهمترین نکات مثبت الگوهای طراحی کمک آنها به مشکل کشف کلاسها و المانهای راه حل و کمک به توسعه ابتکاری است که در الگو وجود دارد. به عنوان مثال اگر مسئلهای با الگوی سازگارساز(Adpater) حل میشود، شناخت اجزای راه حل انجام شده و شما باید ابتکار موجود در الگو را برای تطابق با مسئله واقعی خود توسعه دهید.
یکی دیگر از نکات مثبت دیگر در الگوهای طراحی این است که آنها ماحصل تجربهاند و نه مباحث آکادمیک. به عبارت دیگر برای خلق یک الگو، لازم نیست شما در آزمایشگاههای مهندسی نرمافزار به دنبال کشف نمونهای جدیدی از آن باشید، بلکه باید در حین تجربه و انجام کار، حواستان به گذشتهتان باشد یا به آینده؛ و طرح این سئوال که آیا من درگذشته این مسئله را حل کردهام؟ آیا مسئلهای که با آن روبرو هستم دیگر بار ممکن است تکرار شود؟ به عنوان مثال در سیستمهای انبار و اتوماسیون اداری خیلی اوقات نیاز است که شما کاربر را از اتفاقاتی مطلع نمایید بدون آن که کاربر تعامل خاصی با سیستم داشته باشد(Notification یا هشدار). خوب به راحتی میتوان دید که این مسئله، عمومی و تکرارپذیر است. آیا نمیتوان یکبار برای همیشه حالت عمومی آن را حل کرد؟ ناگفته پیداست که شعار الگوها که "کسی قبلاً مسئله شما را حل کرده است" عینیت پیدا خواهد کرد. جمله زیبای الکساندر شنیدنی است: "هر الگو علاوه بر آن که مسئلهای را بیان میکند که بارها و بارها درمحیطمان اتفاق افتاده است، راه حل عمومی به آن را نیز بیان میدارد. در چنین حالتی میتوان این راه حل را میلیونها بار استفاده کرد، بدون آنکه بخواهیم آن را حتی دوبار به یک شکل انجام دهیم." به همین دلیل است که الگوهای طراحی یکی از روشهای استفاده مجدد کاربردی و مفید در مهندسی نرمافزار هستند.
الگوهای طراحی نقش بسیار مهمی به عنوان زبان مشترک تیم تولید نرمافزار ایفا میکنند. وقتی که در جلسه طراحی یا در ارائه طراحی خود نام یکی از الگوها را میبرید، نیازی به توضیح اضافه نخواهد بود. شاید بد نباشد که بگوییم هرالگوی طراحی برابر است با 1024 کلمه
یکی دیگر از محاسن الگوهای طراحی، کمک بیشائبه آنها در آموزش طراحی شیءگراست. یادم است که هر بار از احسان میپرسیدم که بیا با هم فکر کنیم که چگونه طراحی شیءگرا را به دانشجویان یاد دهیم، تأکید میکرد که اول یک سری مقدمات گفته شود و بعد الگوهای طراحی ارائه گردد. (در ادامه توضیح بیشتر خواهم داد) به عبارت دیگر برای اینکه تفکر طراحان و حتی برنامهنویسان را به سمت تفکر شیءگرا سوق دهید، یکی از بهترین ابزارها، الگوهای طراحی هستند.
من کاملاً با نظر احسان که وی آن را "بازبهکارگیری مفهوم" یا " بازبهکارگیری ایده" مینامد، موافقم. انسان ناشناختهها را از روی شناختهها، میشناسد. مسائل جدید را با استفاده از تجربیات قبلی حل میکند. وقتی کاری را تکرار میکنید، میشود رفتار. وقتی رفتار را تکرار میکنید، میشود خصیصه شما. وقتی که خصایص را تکرار کنید، میشوند بخشی از شخصیت شما. استفاده درست از الگوهای طراحی، ذهن شما ساختارمند و سازمانیافته مینماید تا آن جا که از آنها برای حل سایر مسایل نیزاستفاده میکنید حتی برای حل مسائل روزمره زندگیتان. گاهی شما نقش سازگارساز(Adpater) را بین دو عضو خانواده یا دو دوست را بازی میکنید. گاهی به جای خرید روزانه روزنامه، از الگوی Observer برای حل مشکلتان استفاده میکنید و مشترک روزنامه میشوید.
ایده: نکته جالب دیگر آنکه دوستانی که با تئوری و سیستمهای آشوب (Chaos Theory) آشنا هستند - به عنوان نمونه فراکتالها نمونهای از سیستمهای آشوبند- به خوبی میدانند که یکی از مهمترین خصوصیات این گونه سیستمها داشتن الگوهای خودمانا است. به عنوان مثال فراکتالها که ظاهری بسیار پیچیده دارند دارای الگوهایی با فرمولهای ساده ریاضیاند. کسی چه میداند، شاید سیستمهایی که ما با آنها درگیر هستیم، دارای الگوهای بسیار سادهای هستند که چنانچه کشف شوند، تأثیری شگرف بر نگاه ما در تحلیل و طراحی خواهند داشت. این موضوع را از آن جهت عرض میکنم که هر جایی که انسان حضور داشته باشد به عنوان مثال سازمانها، موضوع سیستم آشوب است. بخش عظیمی از نرمافزارهای ما در جهت تسریع و تسهیل کار این گونه سازمانها است. جمله من خیلی تخیلی و بعید به نظر میرسد ولی فکر کنم چیزهایی که ما امروز داریم تا همین چند سال پیش برایمان قابل باور نبود.
اما با همه نکات مثبت و مزایای الگوهای طراحی، ایراداتی نیز به آن وارد است. شاید بهتر است بگوییم که الگوهای طراحی به تنهایی کافی نیستند.
یکی از مهمترین ایراداتی که به الگوهای طراحی میتوان گرفت، ریزدانه بودن آنها در مقایسه با مسائل بزرگ و پیچیدهای است که ما با آنها مواجه هستیم. سطح مسئلهای که آنها مورد هدف قرار میدهند خیلی کوچکتر از مسائلی است که ما با آنها روبرو هستیم. هر چند الگوهای دیگری مانند الگوهای معماری وجود دارند که این معضل را تا حدی، تسکین میبخشند.
نکته قابل توجه دیگر این است که الگوهای طراحی به خودی خود جواب مسئله شما نیستند بلکه آن را در یک سطح عمومی حل میکنند. لذا شما نیاز به توسعه و تطابق آن با مسئلهای که با آن روبرو هستید، خواهید داشت.
یکی دیگر از معضلاتی که به شدت استفاده از الگوهای طراحی را به خطر میاندازد، تنوع و ازدیاد آنهاست(منظور الگوهای پایه طراحی گاما نیست، بلکه تمامی الگوهای طراحی موجود در تولید نرمافزار است- اینجا را مشاهده کنید). جهت مقایسه اجازه دهید مثالی ذکر کنیم. در دنیای زبان و نوشتار، شما با انبوهی از کلمات و اصطلاحات روبرو هستید که هر یک به نوبه خود، بسیار مفید هستند. اما آیا ما با همه لغاتی که در فرهنگ لغت وجود دارد، گفتهها و نوشتههایمان را بیان میکنیم. مسلماً نه. علت این امر، نامفید بودن سایر لغات نیست، بلکه تنوع و تعداد زیاد آنهاست و شما در هر مقطع از زمان، با یک سری از آنها، نظراتتان را بیان میکنید. این موضوع در مورد الگوهای طراحی و کلاً در مورد تکنیکها صادق هستند. به علت تعداد زیاد آنها، استفاده از آنها چیزی شبیه به استفاده از کلمات فرهنگ لغت خواهد بود.
الگوهای طراحی هر چند مکانیزم خیلی خوبی برای آموزش و حتی طراحی هستند ولی کافی نیستند. مفاهیم، اصول و معیارهایی در طراحی مهم هستند که بر همه جوانب آن و از جمله الگوهای طراحی غالب هستند. یادگیری و آموزش این گونه موارد، مقدم است بر الگوهای طراحی. به عبارت دیگر با الگوهای طراحی شما با یک سری مسائل از قبل حل شده و کاربرد آن آشنا خواهید شد ولی اگر برای مسئلهای که در الگو مطرح شده، جواب جدیدی ارائه شود، آیا میتوانید این جواب را با جواب قبلی مقایسه کنید.
در آموزش الگوهای طراحی یکی از اولین اتفاقاتی که میافتد، اتفاقی است که برای چارلی چاپلین در فیلم عصر جدید افتاد. چارلی در این فیلم از بس که با آچار، پیچها را سفت کرده بود، از خط مونتاژ که خارج شد، هر جا که چیزی شبیه به پیچ پیدا میکرد، شروع میکرد به سفت کردنش. یادگیری الگوهای طراحی (مانند خیلی موضوعات دیگر)، یادگیرنده علاقهمند را مانند چارلی میکند. عدم ممارست در استفاده از آنها و تبدیل دانسته به ساختار فکری یکی از مهمترین چالشهای استفاده از الگوهای طراحی است(البته همه موضوعات جدیدی که میآموزیم)
آنچه ذهن مرا درگیر کرده این است که الگوهای طراحی برای حل مسائل تکرار شونده است. اگر میتوانستیم سطح این الگوها را افزایش دهیم یا الگوهایی برای کنترل تغییرات ارائه دهیم، خیلی عالی میشد.
گزیده: آنچه جذاب است سهولت نيست، دشواري هم نيست، بلكه دشواري رسيدن به سهولت است.
مطالب مشابه :
الگوهای طراحی و معماری-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
مفاهیم معماری نرم افزار شامل معماری نرمافزار، مدل مرجع، پیش رانهای معماری، الگوهای
مهندسی نرم افزار
مهندسی نرم افزار. از هر اندازه و با هر معماری اجرا می شوند، همچنین الگوهای شناخته
این طرح برنده مسابقه طراحی معماری اندونزی شد
دانلود مقاله نرم افزار این طراحی با توجه به الگوهای معماری شهر جاکارتا، مصالح بومی در
برچسب :
الگوهای معماری نرم افزار