Дартс-миксин в настоящее время представляет собой просто набор членов, которые вы можете скопировать поверх других определений классов.
Это похоже на наследование реализации (extends
) за исключением того, что вы расширяете суперкласс, но расширяете с помощью миксина. Поскольку у вас может быть только один суперкласс, mixins позволяет вам другим (и гораздо более ограниченным) способом поделиться реализацией, который не требует, чтобы суперкласс знал о ваших методах.
То, что вы здесь описываете, звучит как что-то, с чем можно справиться, используя обычный суперкласс. Просто поместите методы в Product
и позвольте Bag
и Book
оба расширить этот класс. Если у вас нет подкласса Product
, для которого не нужны методы mixin, нет никаких оснований не включать их в класс Product
для начала.
Если вы хотите использовать миксин, вы можете написать что-то вроде:
abstract class PriceMixin {
String get sku;
int get price => backend.lookupPriceBySku(sku);
}
abstract class Product {
final String sku;
Product(this.sku);
}
class Book extends Product with PriceMixin {
final String title;
Product(String sku, this.title) : super(sku);
}
class Bag extends Product with PriceMixin {
final String brand;
Product(String sku, this.brand) : super(sku);
}
class Brochure extends Product { // No PriceMixin since brochures are free.
final String name;
Brochure(String sku, this.name) : super(sku);
}