قبل از اینکه بخوایم وارد مطلب بشیم باید بدونیم که چه نیازی هست که ما دیزاین پترن ها و معماری های مختلف رو یاد بگیریم؟
اگر نظر من رو بپرسید، نظر من اینه که تاوقتی لزوم استفاده از دیزاین پترن هارو در کدهاتون احساس نکنید یادگیری اونها بی فایدست. در واقع شما بعد از یه مدت به جایی می رسید که دغدغه شما از اینکه چطور یک فیچر رو پیاده سازی کنید به این میرسه که چطور این فیچر رو طوری پیاده سازی کنید که تست و maintenance اون راحت تر باشه و اگر قرار شد یه روزی کدهاتون رو یه بنده خدایی بشینه refactor کنه راحت تر باشه (در اصطلاح bad smell کمتری داشته باشین). خلاصه اینکه نشستن و خوندن این پترن ها به هیچ کاری نمیاد تا وقتی که احساس نیاز بهشون نکردید و حتی پیاده سازیشون باعث پیچیده تر شدن روند برنامه خواهد شد.
قبل از اینکه بریم سراغ اصل مطلب چندتا مبحث داریم که خیلی خلاصه وار بهشون اشاره می کنیم:
برای اینکه از rigidity جلوگیری کنیم باید زمان build و test رو به حداقل برسونیم، یعنی با هرتغییر کوچک مجبور نباشیم تا کل سیستم رو دوباره rebuild وتست کنیم
نشونه های rigidity در کد:
نکته مهم: حواسمون باشه مفاهیم Abstraction شده رو بیش از حد برای سیستم customize نکنیم!
اگر باهرتغییر در سیستم مجبورین بخش های دیگه رو هم تغییر بدید شما دچار fragility هستید.
چیکار کنیم دچار fragility نشیم؟ باید وابستگی بین کامپوننت های مختلف سیستم رو به حداقل برسونیم.
چرا دچار immobility میشیم؟ توجه بیش از حد به جزئیات! (Over engineering نکنید آقا!!! شاید یه روزی یه فیچری لازم شد!)
اگر دید که ماژول ها یا متدهایی که کار یکسانی انجام میدند رو دوباره دارید پیاده سازی میکنید تبریک میگم ساختار شما دچار immobility شده. یادمون باشه که ماژول ها باید کمترین وابستگی رو به environment خودشون داشته باشند تا در اصطلاح reusability اون ها حفظ بشه و بتونیم در محیط های دیگه هم در صورت نیاز از اون ها استفاده کنیم.
کی دچار این بیماری میشیم؟ وقتی که بخاطر سرعت بالاتر در پیاده سازی سیستم قید طراحی درست رو میزنیم! این موضوع باعث میشه تا در آینده تست و اضافه کردن فیچرهای جدید به سیستم انقدر دشوار بشه که از خیرشون بگذریم.
افزایش پیچیدگی در سیستم، باعث سخت تر شدن پیشرفت و اضافه کردن قابلیت های جدید میشه در نتیجه برای اینکار راه های میانبری رو انتخاب می کنیم که خودشون باعث افزایش این پیچیدگی ها خواهند شد.
Robert C Martin
قسمت دوم : آشنایی با اصول Single Responsibility و Open-Closed