در برنامهنویسی دارت ، Mixins و interfaces دو مفهوم مهم هستند که برای تعریف رفتار کلاسها مورد استفاده قرار میگیرند. اگرچه هر دوی آنها برای تعریف یک قرارداد بین کلاسها به کار میروند، اما در پیادهسازی و نحوه استفاده از یکدیگر تفاوت دارند.
در برنامهنویسی Dart، یک interface یک طرح کلی برای یک کلاس است که مجموعهای از متدها و ویژگیهای لازم برای پیادهسازی در آن کلاس را مشخص میکند. یک interface با استفاده از کلمه کلیدی abstract تعریف میشود. یک کلاس میتواند چندین interface را پیادهسازی کند و باید تمامی متدها و ویژگیهای تعریفشده در هر interface را به طور کامل پیادهسازی نماید. از interfaces برای تعریف یک قرارداد بین کلاسها استفاده میشود و آنها زمانی مفید هستند که بخواهید مجموعهای مشترک از متدها و ویژگیها را تعریف کنید که کلاسهای متعددی بتوانند آنها را پیادهسازی نمایند.
از سوی دیگر، یک Mixin روشی برای استفاده مجدد از کد در کلاسهای متعدد بدون بهرهگیری از وراثت است. یک Mixin کلاسی است که شامل مجموعهای از متدها و ویژگیها بوده که میتوان آنها را به کلاسی دیگر اضافه کرد. در Dart، یک Mixin با استفاده از کلمه کلیدی with تعریف میشود. زمانی که یک کلاس از یک Mixin استفاده میکند، متدها و ویژگیهای تعریفشده در آن Mixin را ارث میبرد، اما سوپرکلاس Mixin را به ارث نمیبرد. Mixinها زمانی مفید هستند که بخواهید بدون ایجاد یک سابکلاس جدید، قابلیتی را به کلاس اضافه کنید.
در حالی که از interfaces برای تعریف یک قرارداد بین کلاسها استفاده میشود، mixins برای اضافه کردن قابلیتها به یک کلاس به کار میروند. Interfaces مجموعهای از متدها و ویژگیهای لازم برای پیادهسازی در کلاس را مشخص میکنند، در حالی که mixins مجموعهای از متدها و ویژگیهایی را تعریف مینمایند که میتوان آنها را به یک کلاس اضافه کرد. هر دوی این مفاهیم در برنامهنویسی Dart مهم هستند و برای ایجاد کدهای قابل استفاده مجدد و نگهداری آسان مورد استفاده قرار میگیرند.
هنگام تصمیمگیری بین استفاده از mixin یا interface، موارد زیر را در نظر داشته باشید: