7. الگو های طراحی نرم افزار

7. الگو های طراحی نرم افزار

هر الگویی یک مشکل را تعریف می کند که به طور مرتب در محیط ما رخ می دهد و سپس هسته راه حل را رائه می دهد


    یک تعریف عمومی برای الگوها وجود ندارد، اما شاید بهترین چیز برای شروع یکی از جمله¬هایی Christopher Alexander که یک الهام¬بخش برای علاقه¬مندان به الگوها می¬باشد، مناسب به نظر می¬آید. "هر الگویی یک مشکل را تعریف می¬کند که به طور مرتب در محیط ما رخ می¬دهد و سپس هسته راه¬حل را رائه می¬دهد. بطوری که راه¬حل را شما میلیون¬ها بار می¬توانید استفاده کنید بدون اینکه یک راه دو بار رفته باشید"  [Alexander et al.]. الکساندر یک معمار است بنابراین او درباره ساختمان¬ها صحبت می¬کرده است.اما این تعریف بطور دقیقی برای نرم¬افزار قابل کاربرد است. تمرکز یک الگو بر روی یک راه¬حل ویژه است، راه¬حلی که بسیار معمول و در عین حال موثر در مواجه با یک یا تعداد بیشتری از مشکلات تکرار شونده باشد. راه دیگری برای در نظر گرفتن یک الگو این است که آن¬ها را یک توده بزرگ بدون شکل از پندها یا مشاوره¬ها در نظر بگیریم و هنر ایجاد الگو این است که یک مشاوره یا پند را به قسمت¬های نسبتا مستقل که آن¬ها را می¬توانیم به  هم ارتباط بدهیم و آن¬ها را بیشتر یا کمتر بصورت جداگانه مورد نقد قرار دهیم تقسیم کنیم.
    یک مورد مهم  درباره الگوها این است که آنها در رفتار و اعمال ما ریشه کرده¬اند. شما می¬توانید الگوها را بوسیله نگاه¬کردن به مردم و کارهایی که انجام می¬دهند ببینید. این یک پروسه آسان نیست، اما یکبار که شما الگوهای خوبی پیدا کنید به یک چیز ارزشمند برای شما تبدیل می¬شود. برای من این ارزش به این معنی می¬باشد که این توانایی را داشته باشم که کتابی را بنویسم که به عنوان یک رفرنس استفاده شود. شما نیازی نیست که تمام این کتاب را بخوانید یا همه کتاب¬های الگو را بخوانید تا مفید باشد. کافی هست تا حدی بخوانید که الگوها را درک کنید.، چه مشکلاتی را حل می¬کنند و چگونه این مشکلات را حل می¬کنند. نیازی به این نیست که تمام جزئیات را بدانید در همین حد کافی است که وقتی با مشکلی مواجه شدید بتوانید الگو را در کتاب پیدا کنید. فقط در این لحظه هست که شما واقعا الگوها را درک کرده¬اید.

 


هنگامی که شما به یک الگو نیاز دارید، باید به این فکر کنید که چگونه الگو را به شرایط خود تطبیق دهید. یک نکته کلیدی درباره الگوها این است که شما هرگز نمی¬توانید آن¬ها را به راه¬حل به صورت کورکورانه اعمال کنید که این نشان می¬دهد چرا ابزارهای مربوط به الگوها این گونه شکست¬های مفتضحانه¬ای هستند. من دوست دارم این مثال را بزنم که الگوها همانند یک کیک نیم¬پز هستند. به این معنا که شما باید آن¬ها را در اجاق پروژه خود به طور کامل بپزید. هربار که من در حال استفاده از یک الگو هستم به طور مرتب تغییرات کوچکی در آن بوجود می¬آورم. به دفعات زیاد راه¬حل¬های مشابهی مشاهده¬ می¬کنید، اما هیچ وقت دقیقا یکسان نیستند.
    هرالگویی نسبتا مستقل است، اما کاملا ایزوله شده نیست از یکدیگر نیستند. به طور معمول یک الگو باعث ایجاد الگوی دیگر می¬شود، یا تنها در حالتی رخ می¬دهد که یکی دیگر هم در اطراف باشد. بدین گونه شما یک کلاس جدول وراثت خواهید دید، اگر مدل دامنه¬ای در طراحی شما باشد. مرزها بین الگوها بطور طبیعی بصورت فازی است، اما من تمام تلاش خود را تا آن¬جا که توانسته¬ام کرده¬ام تا هرکدام از آن¬ها را بصورت مجزا در آورم. اگر کسی گفت "Use  a unit of work (184)"، شما می¬توانید آن را پیدا کنید و مشاهده کنید چگونه آن را اعمال کنید بدون اینکه کتاب را کامل بخوانید.
    اگر شما یک طراح نرم¬افزار با تجربه هستید، به احتمال زیاد بیشتر این الگوها برای شما آشنا به نظر خواهد رسید. الگوها ایده¬های اولیه و ابتدایی نیستند. بلکه مشاهده¬هایی از اتفاق¬هایی هستند که در محیط اتفاق می¬افتند. قانون این است که راه حل معمول را مورد بررسی قرار دهیم و به دنبال هسته آن بگردیم و در نهایت الگو را بیرون بکشیم. برای یک طراح پرتجربه ارزش یک الگو به ایده جدیدی که به شما می¬دهد نیست. بلکه ارزش آن کمکی است که به شما می¬کند تا ایده¬های خود را به هم ارتباط بدهید. اگر شما و همکارنتان همه می¬دانید که نمای خارجی چه چیزی هست، شما به مقدار زیادی می¬توانید با این جمله که می¬گوید "این کلاس یک نمای خارجی است" ارتباط برقرار کنید. همچنین به شما اجازه می¬دهد به یک شخص جدیدتر بگویید "از یک شئ انتقال داده برای این استفاده کن" . پس نتیجه این می¬شود الگوها یک واژه در رابطه با طراحی خلق کرده¬اند که این نشان دهنده این است که چرا نام¬گذاری یک مسئله بسیار مهم است.
 

 


نظرات
ارسال نظر