در مهندسی نرم افزار، design patterns(الگوهای طراحی) راه حلهای قابل استفاده برای مشکلاتی هستند که معمولاً در طراحی نرمافزار اتفاق می افتند.
طرح های از پیش ساخته شدهای که میتوانید برای حل مشکلات آنها را سفارشی کنید. شما نمیتوانید یک الگو را با جستجو در stackoverflow پیدا و در برنامه خود کپی کنید. الگو ها یک قطعه کد خاص نیستند، مفاهیم کلی برای حل مشکلات خاص هستند. شما باید با درک این مفاهیم آنها را در برنامه خود پیادهسازی کنید.
Refactoring مجموعهای از تکنیکهاست که به منظور اصلاح و بهبود کدهای قبلی بدون تغییر در عملکرد و رفتارشان جهت خوانایی، کارامدی و قابلیت نگهداری بیشتر انجام میشود.
در کتاب Refactoring اثر Martin Fowler نوشته شده: refactoring تکنیک مرتب/منظم سازی برای تجدید ساختار کد موجود است. تغییر ساختار داخلی کد بدون تغییر رفتار خارجی آن.
refactoring یک سرمایهگذاری و راه حلی برای مقابله با کد کثیف و بدهی فنی است که باعث کاهش هزینههای توسعه نرمافزار در آینده خواهد شد.
ممکن است سالها به عنوان یک برنامه نویس بدون استفاده از الگو های طراحی کار کرده باشید. بسیاری این کار را انجام میدهند! شاید بعد از مطالعه کتاب متوجه شوید برخی از الگو ها را بدون دانستن آنها استفاده کردهاید. پس چرا باید الگو های طراحی را یاد گرفت؟
الگو های طراحی راه حلهای قابل استفاده برای مشکلاتی هستند که در طراحی نرمافزار اتفاق می افتند. حتی اگر هرگز با این مشکلات روبرو نشدهاید که امکان ندارد! شناختن آنها هنوز هم مفید است زیرا به شما میآموزد چگونه این مشکلات حل شدنی هستند. الگو های طراحی یک زبان مشترک تعریف میکنند. که شما و سایر اعضای تیم میتوانید برای برقرای ارتباط مؤثر از آن استفاده کنید.
در اغلب آگهی های استخدام، نیاز به دانش و تخصص الگو های طراحی مطرح شده. در نتیجه آموختن این الگو ها در آینده شغلی شما تأثیر مثبتی خواهد گذاشت.
نگران نباشید! همانطور که با مطالعه کتاب متوجه خواهید شد اولویت درک مفاهیم و پیاده سازی الگوهای طراحی است. در نتیجه زبان برنامه نویسی در اینجا اهمیت اول را ندارد.
از طرفی آوردن مثال از چند زبان برنامه نویسی باعث افزایش حجم کتاب میشد که من این موضوع را نمیپسندیدم. به عنوان راه حل داخل کتاب لینک گیت هاب شامل مثال هایی از پترن دیزاین با زبان های مختلف مثل جاوا، پایتون، سی پلاس پلاس، سی شارپ و… قرار داده شد. در کتاب هم به عنوان نمونه، مثال ها را با PHP نوشتم.
برای گردآوری این کتاب منابع زیادی رو مطالعه/ترجمه کردم مثل refactoring.guru، sourcemaking.com، کتاب Design Patterns: Elements of Reusable Object-Oriented Software و Design Patterns for Humans و نهایتاً کمی تجارب خودم.
بین این موارد از ساختار و روش Design Patterns for Humans که نزدیکترین به هدف من بود و مجوز هاش محدودم نمیکرد خوشم اومد و با همین ساختار جلو رفتم.
مقدمه
الگوی طراحی چیست؟
چرا باید الگوهای طراحی را آموخت؟
انواع الگوهای طراحی
Simple Factory
Factory Method
Abstract Factory
Builder
Prototype
>Singleton
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Chain of Responsibility
Command
Iterator
Mediator
Memento
Observer
Visitor
Strategy
State
Template Method