Design Pattern (الگوی طراحی) چیست و چرا هر دولوپری باید با آن آشنایی داشته باشد؟

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، متوجه می‌شوید که اگر از قبل با الگوهای بیشتری آشنا باشید، لایبرری‌های جدید را هم سریع‌تر درک خواهید کرد.

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

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

یا

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

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

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

همان‌طور که گفتیم، الگوهای طراحی به یک باره اختراع نشده و آموخته نمی‌شوند; بلکه در نتیجهٔ کار سخت و تجربهٔ عمیق از طریق ساخت تعداد زیادی سیستم مختلف به دست می‌آیند. در حین فرایند یادگیری الگوهای طراحی، شاید به دیدگاه یک معمار باتجربه نرم‌افزاری دست یابید و در عین حال به سمت ساخت نرم‌افزارهای بهتر و ماندگارتر پیش خواهید رفت.

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

علاوه بر این، کتاب دیگری تحت عنوان Design Patterns موسوم به Gang of Four یا به اختصار GoF وجود دارد که کمتر برنامه‌نویس حرفه‌ای را می‌توان یافت که این کتاب را نخوانده باشد.

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

منبع


مرتضی صمدی