اگر در مصاحبه های کاری شرکت کرده باشید، یکی از سوالات رایج تفاوفت Design Pattern و Design Principle میباشد. در کنار بحث مصاحبه های فنی ، دانستن مفهوم و تفاوت این دو برای یک برنامه نویس حتی تازه کار، حداقل از نظر بزرگان و نوابغ حوزه برنامه نویسی ( مثلا یکی مثل من!) امری جدی و بسیار حائز احمیت میباشد. ( بخدا اگر به املای حائز گیر بدید ، جیغ میکشم. ضمنن اهمیت را عمدن غلط نوشتم ببینم متوجه می شوید یا نه !).
خیلی مشاهده شده برنامه نویسها این دو را با هم اشتباه میگیرند یا به اصطلاح قاطی میکنند. مثلن از یک نفر سوال میکنی Design Pattern چیست و یکی مثال بزن. سریع میگه SOLID !.
ولی SOLID که Design Pattern نیست.
اجازه بدهید اول یک قدم جدی برداریم و شباهت این دو را از نظر آنچه مغز انسان ممکن است به غلط بیفتد را تا جایی که ممکن است از بین ببریم. عبارت Design را حذف میکنیم. حالا چی داریم ؟
- Pattern
- Principle
دیگه کلمه مشترکی بینشون نیست.
وقتی در مورد Principle حرف میزنیم، باید بدانیم که در حال مطرح کردن یکسری Fundamental Law هستیم. مثلن یک عده در زندگیشون یک Principle دارند که شبها زود بخواند و زود هم بیدار شوند یا فردی در زندگی پیرو قانون همیشه صادق بودن است. این میشود یک Principle در زندگی این فرد. یک طور قانون که نباید نقض( نقض را درست نوشتم ؟) شود. حالا اگر بخواهیم در عامل نرم افزار قانون داشته باشیم، قانونهای ما بر علیه و بر روی کلاسها و متدها و آبجکتها اعمال خواهند شد. مثلن هر متد فقط یک کار انجام دهد. این یک Principle است . یا مطرح میشود که یک Microservice فقط یک Business Problem را حل کند . این هم یک قانون و یک Principle است. خوب حالا وقتی SRP ، یعنی Single Responsibility Principle یعنی قانونی که میگوید هر کلاس یا متد فقط مسئولیت داشته باشد و لطفن یک متد با 5000 حالت ورودی جهت انجام 200 هزار عملیات مختلف درست نکنید. دلیل ؟. نا خوانایی، و نابود کردن Unit Testing و البته 10000 هزار دلیل منطقی دیگر.
حالا دقیق متوجه میشوید که DRY هم یک Principle است. یعنی
Do not Repeat Yourself
که بررسی اینها در این مغال (املای مغال با خودتون. چرا دوتا "غ" داریم در فارسی ؟) نگنجد !
خوب حالا بریم ببینیم Design Pattern پس چیه ؟.
در دنیای واقعی ، پترن یک مدل خاص شلوار یا مبلمان دقیق شبیه و مطابق همدیگر است. در دنیای برنامه نویسی و کد هم داستان همین است. شکل کدهای شما در یک Design Pattern حتی در صورت تعدد ماژولها و کامپوننتها ، شبیه به هم است. دیزاین پترنها عملن یک نوع تمپلیت هستند تا بوسیله آن اولن کد ما شبیه به هم یکدست باشد، ثانیا اصلن شاید یک نوع پروژه با استفاده از یک دیزاین پترن خاص سریعتر به نتیجه برسد یا شاید اصلن یک دیزاین پترن، تنها راه حل یک پروژه باشد.
مثال میزنیم. به هر دلیلی ، نیاز داریم همیشه فقط یک Instance از یک کلاس در یک پروژه وجود داشته باشد. خوب Singleton در خدمت شماست. برای همین است که انتظار میرود اقلن تیتر و اسم دیزاین پترنها را بلد باشیم تا نیاز نباشد برای هر پیاده سازی 2 ماه دور خودمان بگردیم و تازه شاید غلط ترین راه را پیدا کنیم.
خوب تمام شد. حالا بروید روی Design Pattern ها و Principle ها کار کنید و تجربه کسب کنید، باشد که پند گیرید.