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