باگتو
باگتو
خواندن ۶ دقیقه·۳ سال پیش

دیزاین پترن چیست؟

design-patterns
design-patterns


اگر در حال مطالعه این مقاله هستید تصمیم گرفته‌اید پا به دنیای برنامه‌نویسان حرفه‌ای بگذارید. به شما تبریک عرض می‌کنم

حالا چرا دنیای برنامه‌نویسان حرفه‌ای؟

چون معمولاً افراد آماتور از مفاهیمی چون دیزاین پترن‌ها استفاده نمی‌کنند و افراد حرفه‌ای هستند که به دنبال آموزش دیزاین پترن‌ها می‌باشند

شاید برای برنامه‌نویسان تازه‌کار آشنایی با دیزاین پترن‌ها سخت و پیچیده باشد، اما واقعاً دیزاین پترن‌ها خیلی پیچیده نیستند و به‌راحتی می‌توانید با این مفهوم آشنا باشید و از انواع دیزاین پترن‌ها در پروژه‌های خود استفاده کنید

در ادامه این مقاله شما را کامل با مفهوم دیزاین پترن آشنا می‌کنیم

برای آشنایی کامل با دیزاین پترن ها آموزش دیزاین پترن ها در C# رو در سایت ببینید

بررسی یک چالش در پروژه‌های نرم‌افزاری

 چالش های پروژه
چالش های پروژه


در پروژه‌های نرم‌افزاری چالش‌ها و مشکلات متعددی وجود دارد و شما به‌عنوان یک برنامه‌نویس و یا طراح سیستم باید راه‌حل‌هایی برای حل این مشکلات ارائه کنید.

فرض کنید شما به‌عنوان یک مدیر فنی در یک شرکت طراحی نرم‌افزار مشغول به کار هستید و تیم شما در حال طراحی یک نرم‌افزار واژه‌پرداز مثل Office Word می‌باشد.

حالا نیاز کارفرما این است که در این نرم‌افزار واژه‌پرداز قابلیت‌های Undo/Redo هم اضافه شود و شما به‌عنوان مدیر فنی باید بهترین راه‌حل، برای پیاده‌سازی این قابلیت‌ها رو ارائه کنید.

فرض ما بر این است که شما و اعضای تیم تابه‌حال در هیچ نرم‌افزاری قابلیت‌های Undo/Redo را پیاده‌سازی نکرده‌اید و با نحوه پیاده‌سازی همچنین قابلیت‌هایی آشنایی ندارید.

شما با یک چالش جدید روبه‌رو شده‌اید و مجبورید راه حلی برای غلبه بر این چالش ارائه کنید.

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

راه‌حل ارائه شده توسط شما باید بتواند به این سؤال‌ها پاسخ مثبت دهد:

  1. آیا در آینده توسعه برنامه را بدون مشکل می‌توانیم انجام دهیم؟
  2. این راه‌حل انعطاف‌پذیر هست؟آیابعد از پیاده‌سازی این راه‌حل سیستم ما Reusable هست؟
  3. استفاده مجدد از کدها بالاتر می‌رود؟
  4. با این راه‌حل طراحی برنامه بهتر می‌شود؟
  5. آیا کدنویسی تمیزی انجام شده؟
  6. این راه‌حل مورد پذیرش اعضای تیم هست؟ و همه اعضای تیم می‌توانند آن را به‌خوبی درک کنند؟
  7. می‌توانیم راه حلی که استفاده کرده‌ایم را ضمانت کنیم؟ آن‌قدر به راه‌حل اعتماد داریم که بتوانیم قاطع بگوییم این بهترین راه‌حل این مشکل است؟
  8. هر راه حلی که ارائه می‌کنید باید به این سؤالات پاسخ دهد و به این صورت می‌توانیم تشخیص دهید که راه‌حل مناسبی ارائه کرده‌ایم یا خیر؟

حالا شما به‌عنوان مدیر فنی تیم توسعه می‌توانید در سریع‌ترین زمان ممکن یک راه‌حل مناسب برای قابلیت‌های Undo/Redo به تیم ارائه بدهید؟ راه حلی که بتواند به سؤالات بالا پاسخ مثبت بدهد؟

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

خب حالا که ما نمی‌توانیم خیلی سریع یک راه‌حل مناسب برای این مشکل ارائه کنیم باید چه کاری انجام دهیم؟


مشکل شما با استفاده از دیزاین پترن‌ها برطرف می‌شود باید از یک دیزاین پترن که مخصوص این کار ارائه شده است استفاده کنید.

دیزاین پترن چیست؟

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

چرا از دیزاین پترن‌ها استفاده کنیم؟

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

.این دیزاین پترن‌ها حاصل تلاش و تجربه صدها برنامه‌نویس می‌باشند و در هزاران پروژه مختلف توسط تیم‌های زیاده استفاده شده است و به همین دلیل ما می‌توانیم به‌درستی این راه‌حل‌ها اعتماد کنیم

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

معروف‌ترین دیزاین پترن‌ها کدام‌اند؟

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

در سال 1994 برای اولین‌بار چهار نفر تصمیم گرفتند از میان دیزاین پترن‌های ارائه شده تا آن زمان محبوب‌ترین و پرکاربردترین دیزاین پترن‌ها را در کتابی به نام Design Patterns: Elements of Reusable Object- Oriented Software جمع آوری کنند.

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

چهار گانگستر
چهار گانگستر


در این کتاب 23 دیزاین پترن در سه دسته:

  • دیزاین پترن‌های ساختاری
  • دیزاین پترن‌های ایجادی
  • دیزاین پترن‌های رفتاری


ارائه شدند. با این که از زمان ارائه این دیزاین پترن‌ها سال‌ها می‌گذرد اما همچنان این دیزاین پترن‌ها مورداستفاده قرار می‌گیرند و در همین وب‌سایت باگتو تا به امروز حداقل از 3 دیزاین پترن Gof استفاده شده است.

البته بعد از سال 1994 دیزاین پترن‌های دیگری هم ارائه شدند که کاربردهای زیادی در برنامه‌نویسی دارند و امروزه هم از دیزاین پترن‌های Gof استفاده می‌شود و هم از دیزاین پترن‌های جدیدی که ارائه شده‌اند.

چه کسانی باید کار با این دیزاین پترن‌ها را یاد بگیرند؟

اگر برنامه‌نویسی شیءگرا انجام می‌دهید و قصد دارید وارد دنیای برنامه‌نویسان حرفه‌ای شوید و کدهای حرفه‌ای و تمیزتری بنویسید و یا اگر طراح نرم‌افزار یا مدیر فنی تیم‌های نرم‌افزاری هستید باید با دیزاین پترن‌ها آشنا باشید و بتوانید از آن‌ها در جای مناسب استفاده کنید.

برای یادگیری سریع و اصولی 23 دیزاین پترنی که توسط چهار گانگستر معرفی شدند می‌توانید از دوره آموزش دیزاین پترن ها در C# سایت باگتو شرکت نمایید. در این دوره تمامی 23 الگوی طراحی را به صورت کامل با مثال های عملی به شما آموزش می دهیم و بعد از شرکت در این دوره شما دانش کافی در مورد دیزاین پترن‌ها رو بدست می آورید و در هنگام مواجه شدن با مشکلات در پروژه‌های خود به‌راحتی نگاهی به لیست دیزاین پترن‌های که یاد گرفته‌اید می اندازید و مناسب ترین دیزاین پترن را برای رفع مشکل خود استفاده می کنید.

برای قابلیت‌های undo/Redo از چه دیزاین پترنی استفاده کنیم؟

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

و حالا باید لیست دیزاین پترن‌های ارائه شده را در دست بگیرید و قابلیت‌های آنها را مطالعه کنید و از بین آن‌ها دیزاین پترنی که مناسب مشکل شما می‌باشد انتخاب کنید و از آن استفاده کنید که در این مورد خاص می‌توانید از دیزاین پترن Command استفاده کنید.


نتیجه‌گیری:

دیزاین پترن‌ها راه‌حل‌های اثبات شده‌ای هستند که برای رفع مشکلات ارائه شده‌اند. چون حاصل تلاش افراد و تیم‌های زیادی می‌باشد و در پروژه‌های مختلفی بارهاوبارها مورداستفاده قرار گرفته‌اند ما می‌توانیم به این روش‌ها اعتماد کنیم و از آنها استفاده کنیم.

و از طرفی چون یک روش عمومی می‌باشند که احتمالاً همه اعضای تیم با آن آشنایی دارند همه افراد تیم به‌راحتی می‌توانند آن را درک کنند و آن را به‌درستی به کار ببرند.

دیزاین پترنالگوهای طراحیdesign
ما در باگتو تصمیم گرفتیم تا با ارائه دوره‌های آموزشی جامع و متنوع در زمینه‌های مختلف NET، گامی مؤثر در جهت افزایش کیفیت مهارت‌های فنی برنامه‌نویسان و بهبود استانداردهای نرم‌افزاری ایرانی برداریم
شاید از این پست‌ها خوشتان بیاید