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