dotNet full-stack web developer
Composition Over Inheritance
اما به چه معنا است؟
???????????: بین یک کلاس پایه و یک زیر کلاس رابطه "Is-a" بوجود می آورد. این یک راه سریع و شهودی برای به اشتراک گذاشتن رفتار بین کلاس ها است. اما نگهداری code base را دشوار میکند.
- کلاس های فرعی به پیاده سازی کلاس والد بستگی دارد. navigate سخت است.
- زیر کلاس ها همه رفتارهای کلاس والد را به ارث می برند، حتی اگر به آنها نیاز نداشته باشند.
- نادیده گرفتن(Overriding) رفتار کلاس والد می تواند اشکال ایجاد کند.
???????????: یک رابطه "Has-a" تشکیل میدهد.
ایده ساختن آبجکتها پیچیده با ترکیب آبجکتهای ساده تر است.
- کامپوننت ها در کلاس های مختلف قابل استفاده مجدد هستند.
- تغییر رفتار در زمان اجرا با تغییر اجزای یک کلاس آسان است.
- اجزای کوچکتر و خودکفا راحت تر تغییر می کنند.
- کامپوننت ها مستقل هستند و از طریق interface های کاملاً تعریف شده با هم تعامل دارند و وابستگی آنها را کاهش می دهند.
مزایای ???????????:
- بهبود تست پذیری اجزای جداگانه.
- آسان برای تغییر اجزای مستقل.
- کپسولاسیون و اصل مسئولیت واحد(SRP) را ترویج می کند.
مضرات ???????????:
- افزایش تعداد اشیاء در یک سیستم.
ترجیح Composition بر Inheritance به این معنی نیست که وراثت یک مفهوم منسوخ است.
Inheritance مفید باقی می ماند، به خصوص زمانی که چندشکلی و سلسله مراتبی حوزه مسئله را مدل می کنند.
نظر شما چیست؟

همینطور این مقاله را بخوانید
مطلبی دیگر از این انتشارات
آموزش طراحی سیستم: سه مفهوم سیستم های توزیع شده که باید بدانید
مطلبی دیگر از این انتشارات
ساخت APIهای وب مقیاس پذیر و ایمن با محدودیت نرخ در dotNET Core Web API با استفاده از AspNetCoreRateLimit
مطلبی دیگر از این انتشارات
سوال مصاحبهای که طرز فکر من در مورد طراحی سیستم را تغییر داد.