Design-Pattern-چیست؟

 Design Pattern چیست؟

Design Patternها در زمان طراحی سیستم های نرم افزاری و یا فرایند تولید جواب بسیار مورد توجه قرار می گیرد. الگوها سر و صدای زیادی به پا کرده است. از طرفی ممکن است در استفاده از آن ها دچار سردرگمی بشویم. اساساً با سوالات زیر مواجه خواهیم بود:

  •  Design Pattern چیست؟
  •  چرا باید از Design Patternها استفاده کنیم؟
  •  چه زمانی باید از Design Patternها استفاده کنیم؟
  • انواع Design Patternها
  •  چند الگو وجود دارد؟

در اولین سری از آموزش های Design Pattern سعی خواهیم کرد به این سوالات پاسخ دهیم.


 Design Pattern یا الگوی طراحی چیست؟

Design Patternها یکسری جواب های ثابت شده به مشکلات رایج در طراحی هستند. به وسیله آنها می توان یکسری راهکار برای حل مسائل بازگشتی در طراحی برنامه تعریف کرد.
به طور واضح، Design Patternها کدهای آماده ای نیستند که بتوان مستقیماً از آن ها استفاده کرد. اما یسکری رویکرد یا نظریه برای حل چالش های عادی طراحی ارائه می دهند.


چرا باید از Design Patternها استفاده کنیم؟

دلیل استفاده از آنها واضح است. چرا باید چرخ را دوباره اختراع کنیم؟ در حالیکه جواب های کاربردی، تست شده و مستند برای یکسری مسائل بازگشتی رایج داریم.
باید از design pattern ها برای طراحی و توسعه اجزاء (componentها) ای استفاده کنیم که مجدداً قابل استفاده و مقیاس پذیر بوده باشند و به تیم برنامه نویسی کمک کنند تا عملیات توسعه در زمان مقرر و با کیفیت بالاتری به انجام برسد.
طراحی یک برنامه به شکل استاندارد یا تست شده به سایر توسعه دهنده گان و کسانی که کدهای برنامه را قرار است مرور کنند، اجازه می دهد به راحتی مفهوم کدهای نوشته شده را درک کنند.


 چه زمانی باید از Design Patternها استفاده کنیم؟

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


انواع Design Pattern ها

در بخش زیر انواع مختلفی از الگو‌های طراحی رو مورد بررسی قرار میدهیم.

  • الگوهای تکوینی (Creational Patterns)
  • الگوهای ساختاری (structural patterns)
  • الگوهای رفتاری (behavioral patterns)
  • الگوهای همزمانی (Concurrency patterns)

الگوهای تکوینی (Creational Patterns)

این الگو‌ها همونطوری که از اسمشون هم مشخصه راه‌حل‌هایی رو در ایجاد اقلام مختلف مثل متدها، نمونه‌ها و… برای ما تعریف می‌کنند. 

الگوهای ساختاری (structural patterns)

این دسته از پترن‌ها این امکان رو به ما میدن که به شکل بهینه‌تری بین ساختارها، متدها، کلاس‌ها و اساسا هر موجودیتی که در زبانمون داریم ارتباط برقرار کنیم.

الگوهای رفتاری (behavioral patterns)

الگوهای رفتاری هم به رفتار Entityهامون (موجودیت‌ها شامل کلاس، متد، نمونه، اینترفیس و…) نسبت به مسائل مختلف میپردازند. مسئله میتواند تغییر یک entity دیگه باشد یا میتواند تغییر state داخل خود entity باشد.

الگوهای همزمانی (Concurrency patterns)

الگوهایی که به همزمانی رویدادها در خلال اجرای برنامه می‌پردازند. این الگوها از نظر من یک مرحله پیشرفته‌تر از الگو‌های قبلی هستند.


چند الگو وجود دارد؟

هیچ عدد مشخصی برای تعداد الگوها وجود ندارد. چرا که این الگو ها در طول زمان تکامل یافته و توسط سازندگان نرم افزار ها مورد استفاده قرار گرفته و بررسی شدند. بررسی این الگوها توسط یک گروه چهار نفره منصوب به Gang Of Four انجام شد. علاوه بر این نگاهی بر اصول طراحی SOLID خواهیم داشت.
به طور خلاصه، با چند اصل اولیه طراحی نظیر: کد نویسی تمیز (clean coding)، loose coupling و طراحی modular و غیره، طراحی خود را آغاز کنید و چالش های طراحی را با مسائل شناخته شده و موجود در Design Patternها ارزیابی کنید. پس از آن، اگر به الگوی مناسبی رسیدید، ادامه دهید و در غیر اینصورت به همان طراحی خودتان اکتفا کنید. 
به عنوان آخرین نکته یادآور می شوم هرگز برنامه خود را مجبور به استفاده از Design Patternها نکنید و تنها زمانی که به آنها نیاز دارید به سراغ آنها بروید.


برچسب ها :


اشتراک گذاری :