5 دلیل برای یادگیری Design Pattern ها یا الگوهای طراحی

اگر با مفهوم Design Pattern (دیزاین پترن یا الگو طراحی) آشنایی داشته باشید، به طور حتم می دانید که دیزاین پترن ها به مجموعه یی از راه کارها در برنامه نویسی شیء گرایی گفته می شوند که می توانید از آن ها در کدنویسی پروژه ها -اعم از کوچک و بزرگ- استفاده نمایید. ایده ی این الگوها که توسط متخصصان با تجربه در زمینه شیء گرایی پیاده سازی شده اند، می توانند کمک کنند تا سورس کدتان انعطاف پذیرتر، تغییر پذیرتر و برای نگهداری آسان تر شوند. بنابراین اگر هنوز هم الگوهای طراحی را جزو چرخه توسعه تان به حساب نمی آورید، قصد داریم 5 دلیل بیاوریم که چرا باید آن ها را هم به جعبه ابزارتان اضافه کنید! با سکان آکادمی همراه باشید.

۱. عدم نیاز به اختراع دوباره چرخ!
 یک اصل ثابت در توسعه نرم افزارها وجود دارد. اشتباه نکنید، منظورمان تاخیر در اتمام پروژه یا نیاز به بودجه بیشتر نیست! بلکه اعمال تغییرات در صورت نیاز است. تغییرات هنگامی رخ می دهند که نیازمندی ها عوض می شوند، سیستم ها رشد می کنند، ویژگی های جدید اضافه می شوند، کارایی بهبود می یابد و موارد دیگر. حال سوال اینجا است که چگونه می توان نرم افزاری تولید کرد به طوری که تاثیر این تغییرات در آن حداقل باشد؟ نیاز به توضیح نیست که یکی از سخت ترین جنبه های توسعه نرم افزاری چیزی نیست جز درک کدهای موجود (که احتمالا توسط افراد دیگری نوشته شده اند) و اصلاح این کدها به نحوی که نقص های جدید یا نتایج ناخواسته بروز نکند.

در پاسخ به سوال فوق بایستی گفت که در واقع، معجزه ای در کار نیست ولی تکنیک هایی وجود دارند که می توان از آن ها در برنامه نویسی شیء گرا استفاده کرد تا برای تغییرات هم مناسب باشند. تکنیک هایی که بر اثر تجربه افراد حرفه ای در شرایط سخت توسعه داده شده اند و برای استفاده ی عموم به بازار عرضه شده اند. این تکنیک ها به Design Patterns یا «الگوهای طراحی» موسوم هستند و طرح های پیش ساخته ای را فراهم می کنند که برای حل مشکلات رایج در برنامه نویسی می توان از آن ها استفاده نمود. این الگوها جزء لایبرری ها یا ماژول ها نیستند بلکه راهبردهایی هستند که می توانند در هسته ی طرح هایتان گنجانده شوند که باعث راحتی در ساخت سیستم های شیء گرا با قابلیت انعطاف و نگهداری بالا می شود. بنابراین وقتی می توان از تجربه بهترین طراحان شیء گرایی استفاده کرد، چرا باید اقدام به اختراع یک چرخ ناسالم کنیم؟

۲. مهارت های مربوط به شیء گرایی تان را بهبود دهید 
همگی آموخته ایم که سنگ بنای برنامه نویسی شیء گرا چیزی نیست جز: Abstraction, Inheritance, Polymorphism, Encapsulation که به ترتبی می توان معادل های کپسوله سازی، چندریختی، وراثت و انتزاع را برای این اصطلاحات در نظر گرفت (البته شدیدا توصیه می کنیم که از یادگیری معادل های فارسی این اصطلاحات خودداری نمایید.) با این که این سخن درستی است اما طراحی سیستم های شیء گرا به همین جا ختم نمی شود. در حقیقت، استفاده عادی از این قواعد پایه ای می تواند سریعا باعث ایجاد مشکلاتی مثل تکرار کد، طراحی ضعیف و استفاده بیش از حد از کلاس ها شود.

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

۳. الگوها را در لایبرری ها و زبان های مختلف تشخیص دهید
 دیزاین پترن ها راه حل های عمومی برای حل مشکلات رایج در طراحی شیء گرا هستند به این معنا که راه حل هایی هستند برای مشکلات طراحی شما. در واقع شما نمی توانید یک نمونه الگوی طراحی را برای افزودن به طرح تان دانلود و نصب نمایید بلکه باید الگوی طراحی را در داخل سیستم تان پیاده سازی کنید. برنامه نویسان غالبا با الگوهایی در لایبرری ها، پکیج ها و ماژول هایی که استفاده می کنند مواجه می شوند که از آن جمله می توان به پکیج ورودی/خروجی (I/O) فایل در جاوا اشاره کرد.

زبان برنامه نویسی جاوا از الگوی Decorator استفاده می کند، که اجازه می دهد تا یک شیء ورودی/خروجی از فایل اصلی گرفته و سپس آن را با امکانات جدیدی طبق نیاز خود ترکیب کنید. این روش بسیار خوبی برای طراحی یک سیستم ورودی/خروجی فایل است. و اگر از قبل با الگوهای طراحی آشنا باشید (و به طور خاص الگوی decorator) به سادگی متوجه چگونگی طراحی این شیء و روش کار آن خواهید شد. در یک کلام، به کار بردن این دیزاین پترن باعث می شود سریع تر طراحی سیستم را درک کنید.

بنابراین خواه از File Object جاوا (Decorator Pattern) استفاده کنید یا از Event Objects جاوا اسکریپت (Observer Pattern) یا NSUserDefaults Object  از شرکت Cocoa موسوم به Singleton یا الگوی Model-View-Controller، متوجه می شوید که اگر از قبل با الگوهای بیشتری آشنا باشید، لایبرری های جدید را هم سریع تر درک خواهید کرد.

۴. از فهرست لغات مشترک استفاده کنید 
همان طور که در مورد شماره 3 بیان شد، یکی از مزایای یادگیری دیزاین پترن ها آشنایی با الگوهای عمومی و همگانی است. اگر همراه با گروه تان قصد سرعت بخشیدن به کارتان را دارید، از طریق این الگوها، نیروی جدیدی برای برقراری ارتباط درباره ی منظور خود در طرح هایتان با هم تیمی هایتان بدست می آورید. به عنوان مثال، فرض کنید هم گروهی تان می خواهد قسمت جدیدی از طراحیش را برایتان شرح دهد. دو طرز بیان زیر برای این منظور امکان پذیر است:

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

یا

من این کلاس برودکست را بر پایه ی الگوی Observer ساختم.

در روش اول، باید مدت زیادی فکر کنید تا دقیقا متوجه شوید که «کلاس برودکست» چه کاری انجام می دهد. در روش دوم، طرز کار کلاس را از قبل می دانید. این قدرت به کارگیری فهرست لغات مشترک برای الگوها است. اگر به زبان الگوها ارتباط برقرار کنید، توسعه دهندگان دیگر فورا و با جزئیات بیشتر متوجه طرحی که قصد بیان آن را دارید خواهند شد.

۵. حقیقت و زیبایی را بیابید 
با این که در ترکیب و ساخت سیستم های شیء گرا به دست خودتان چیزهای زیادی برای یادگیری وجود دارد، می توانید از مزایای شناخت و بینشی که از طریق مطالعه و استفاده از دیزاین پترن ها بدست می آید، استفاده نمایید. همان طور که بیان کردیم، الگوهای طراحی به یکباره اختراع نشده و آموخته نمی شوند; بلکه در نتیجه کار سخت و تجربه عمیق از طریق ساخت تعداد زیادی سیستم مختلف بدست می آیند. در حین فرایند یادگیری الگوهای طراحی، شاید به دیدگاه یک معمار باتجربه نرم افزاری دست یابید -کاری را درخشان و شگفت آور و گاهی اوقات غیر بصری خواهید یافت- و در عین حال به سمت ساخت نرم افزارهای بهتر و ماندگارتر پیش خواهید رفت.

یادگیری الگوهای طراحی را از امروز شروع کنید
یک دهه قبل کتابی نوشته شد که همه ی نیازهای درک اصول و الگوهای طراحی شیء گرا را آموزش می دهد؛ این کتاب که نام آن Head First Design Patterns است، برنده جایزه Jolt شده و یکی از کتاب های پرفروش انتشارات O’Reilly نیز هست و بسیاری افراد را در یادگیری این الگوها راهنمایی کرده است. علاوه بر این کتاب دیگری نیز تحت عنوان Design Patterns موسوم به Gang of Four یا به اختصار GoF وجود دارد که کمتر برنامه نویس حرفه یی را می توان یافت که این کتاب را نخوانده باشد.

آیا شما تجربه ی استفاده از دیزاین پترن ها را در پروژه های خود دارید؟ به غیر از موارد فوق، به نظر شما استفاده از این الگوهای طراحی نرم افزار چه مزایای دیگری دارند؟ نظرات خود را با سایر کاربران سکان آکادمی به اشتراک بگذارید.

5 reasons to finally learn design patterns

0


مرتضی صمدی

مرتضی صمدی در حال حاضر بیش از هر چیزی دیگری به کسب تجربه فکر می کند تا به محض این که خدمت سربازی اش به پایان رسید، گزینه های کاری به مراتب بهتری برای ورود به بازار کار داشته باشد. مرتصی متولد سال 1371 و دانشجوی رشته ی نرم افزار است. زبان انگلیسی رو با مطالعه زیاد مطالب مختلف فرا گرفته و سکان آکادمی این افتخار را دارد تا از تجربیات وی در این حوزه بهره مند گردد. علاقه ی وی به برنامه نویسی اندروید خیلی زیاده اما بیش از آن، به نوشتار طنز گرایش داشته و امیدوار است روزی طنز را در برنامه نویسی یا برنامه نویسی را در طنز ادغام کرده و محیط دلنشین تری برای یادگیری این مهارت فراهم گرداند. جمله یی که یادآوری آن به مرتضی حس خوبی می ده این است که "اگه تو 30 سالگی پیانو زدن رو شروع کنیم، تو 50 سالگی به احتمال زیاد حرفی واسه گفتن داشته باشیم!" ولی از آنجا که نه پیانو داره و نه 30 سالش شده، فعلا به تمرین سوت می پردازه ...






  • بهزاد مرادی در تاریخ: 1395/08/09

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

  • عیسی پور در تاریخ: 1395/08/09

    مقاله خوبی بود تشکر آقای مهندس صمدی عزیز

  • حسن مقدم در تاریخ: 1395/08/10

    سلام عالی بود استفاده کردم
    تشکر

  • علی ورزشی در تاریخ: 1395/08/25

    دنیای Design pattern ها دنیای خیلی جالبیه . به شخصه با 10 مورد از این الگوهای طراحی کار کردم و دیدم که عملکرد کد نویسی رو چه قدر بهبود می بخشه . ولی واقعا فهمیدنش سخته برای بعضی مواد . به شخصه توصیه می کنم که اگه علاقه مند بودید در این زمینه مطالعه داشته باشید مستقیم سراغ کد ها نرید . بلکه اول به دنبال این باشید که مثال هایی رو که تو دنیای واقعی بیان شده رو پیدا کنید . با این کار اول اصل مشکل رو حل می کنید و بعد بعترین راه حل رو ا استفاده از الگو های طراحی پیدا خواهید کرد . درک کد ها هم به مراتب ساده تر و راحت تر خواهد شد موقف و موید باشید .

از طریق این فرم، می توانید بدون ثبت نام نظر دهید و یا اگر قبلا ثبت نام کرده اید، با ورود ناحیه ی کاربری می توانید علاوه بر ثبت نظر، به مدیریت نظرات خود نیز بپردازید.
(فیلد اجباری)
(فیلد اجباری)
(فیلد اجباری)
(فیلد اجباری)