بررسی اجمالی
Mixin یک مفهوم برنامه نویسی شی گرا است که با موفقیت در سناریوهای توسعه برنامه های کاربردی سازمانی استفاده شده است. در یک زبان برنامه نویسی شی گرا، Mixin کلاسی است که شامل متدهایی از کلاس های دیگر است. کلاس Mixin لزوماً نباید کلاس والد همه آن کلاسهای دیگر باشد. به این معنی که Mixin را می توان به جای "ارثی" به عنوان "شامل" نامید.
Mixin اجتناب از DoD (الماس مرگ)
Mixin قابلیت استفاده مجدد کد را به ارمغان می آورد و می تواند برای جلوگیری از مشکل الماس کلاسیک مرگ به دلیل ابهام ارثی که می تواند ناشی از وراثت چندگانه باشد، استفاده شود.
الماس مرگ چیست؟
الماس مرگ به ابهامی اشاره دارد که زمانی که دو کلاس (مثال parent1 و parent2) از یک کلاس پایه (پایه) و کلاس دیگر (Child) از کلاسهای parent1 و parent2 ارث می برند، رخ می دهد. لطفاً برای جلوگیری از سردرگمی در مورد این ارث به نمودار زیر مراجعه کنید.
فرض کنید کلاس پایه حاوی متدی به نام Display() باشد. کلاسهای paren1 و parent2 متد Display() را لغو میکنند. با این حال، کلاس Child متد Display() را لغو نمی کند. بنابراین، وقتی نمونه ای از کلاس Child متد Display() را فراخوانی می کند، کدام نسخه از متد فراخوانی می شود؟ والد 1 یا والد 2؟
به دلیل شکل نمودار وراثتی (الماس) به این الماس مسائل مرگ گفته می شود.
چگونه Mixin از DoD جلوگیری می کند؟
کلاس Mixin شامل هیچ ارثی نیست و می تواند متدهایی از کلاس های دیگر باشد. این به جلوگیری از الماس مرگ کمک می کند. اگرچه وراثت مجازی می تواند به DoD رسیدگی کند، جایگزین های Mixin می توانند به طور موثر مورد استفاده قرار گیرند. الگوی Mixin در انجمن Jthe avaScript بسیار محبوب است.
Mixin به پیاده سازی اصل وارونگی وابستگی کمک می کند
اصل وارونگی وابستگی (DIP) در اصول SOLID D است و به جداسازی ماژول ها اشاره دارد.
- ماژول های سطح بالا نباید مستقیماً به ماژول های سطح پایین وابسته باشند. در عوض، هر دو باید به انتزاع بستگی داشته باشند.
- انتزاع نباید به جزئیات بستگی داشته باشد. در عوض، جزئیات باید به انتزاع بستگی داشته باشد.
Mixin به ما کمک می کند تا با ارائه انتزاع از اصل وارونگی وابستگی پیروی کنیم و به تزریق وابستگی ها کمک می کند.
مخلوط در عمل
به روشی بسیار ساده، Mixin را می توان به صورت زیر نشان داد.
تقدیم به تصویر: https://www.safaribooksonline.com
Mixin امکان تعریف مجموعه ای از عملکردها را برای یک شی فراهم می کند. کلاس Mixin عملکرد متمایز را تعریف می کند. کلاس های دیگر می توانند کلاس Mixin را شامل شوند و به ویژگی ها و متدهای آن دسترسی داشته باشند.