سرمایه گذاری متفاوت در سال نو 🍎🌱 ۳۵٪ تخفیف نوروزی ➕ حضور رایگان در مسترمایند نخبگان صنعت نرم‌افزار 💻✅
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ محسن محمدخانی
طرز اجرای open for extension closed for modification
کیوان علی محمدی حل شده توسط کیوان علی محمدی

سلام

فرض کنید ما یک کلاس به شکل زیر  در ورژن ۱.۰  برنامه داریم.

class ClassTest{
	public function methodTest1(){
		codeA;
		codeB;
		codeC;
		codeD;
	}
}

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

class ClassTest{
	public function methodTest1(){
		codeA;
		codeH;
		codeM;
		codeC;
		codeP;
	}
}

این جا با تغییر متدهای کلاس ما عملا اصل دوم SOLID که میگه (open for extension closed for modification) زیر پا گذاشتیم

این جا باید چطوری نرم افزار توسعه  بدیم طوریکه این قانون نقض نشده (سورس کد قبلی ویرایش نشه)

آیا دیزاین پترن decorator  که functionality  اضافه میکنه بدون اینکه کلاس تغییر بده راه حل این مشکل هست؟

سلام.هر متدی قراره یک logic رو پیاده سازی کنی و با تغییر اون logic این معنی رو نمیده که OCP نقض میشه  الگوهایی مثل Decorator و Strategy می‌تونن نمونه‌های از اضافه کردن عملیات‌ها بدون تغییر کدهای کلاس باشن.

کیوان علی محمدی ۲۵ شهریور ۱۳۹۹، ۰۶:۴۹

پس در چه حالتی قانون  (open for extension closed for modification) تو توسعه نرم افزار نقض میشه؟

امکانش هست یک مثال بزنید

محسن محمدخانی ۲۵ شهریور ۱۳۹۹، ۰۶:۵۴

بله حتما. مثلا تصور کنید یک کلاس قراره Notification ارسال کنه و این کلاس باید بتونه مثلا هم Email ارسال کنه و هم SMS و هم روش‌های ارسال دیگه. حالا اگر ما بیام توی این کلاس بگیم مثلا اگر Email بود این کد اجرا بشه و اگر SMS بود این کد اجرا بشه و .... خلاصه برای هر روش ارسال بیایم و کد به کلاس اضافه کنیم این دقیقا OCP رو نقض می‌کنه چون میایم و برای هر روش ارسال کلاس اصلی رو تغییر میدیم در حالی که مثلا با Strategy می‌تونیم هر روشی رو اضافه کنیم بدون اینکه کلاس اصلی رو تغییر بدیم.

بهترین پاسخ
کیوان علی محمدی ۲۵ شهریور ۱۳۹۹، ۰۷:۱۳

پس design patterns‌ها مشکلی حل می‌کنند که از قوانین SOLID سرچشمه میگره؟و این باعث افزایش توسعه پذیری نرم افراز میشه

چون اضافه کردن if در حالت عادی مشکل نیست مگر اینکه  قانون دوم  SOLID  وجود نداشته باشه

محسن محمدخانی ۲۵ شهریور ۱۳۹۹، ۰۷:۲۰