Недавно я видел концепцию Mixin в javascript в основном через статью Real Mixins с javascript-классами. И, как я понимаю, это способ сделать множественное наследование абстрактными классами и больше похож на композицию, чем наследование. Я также читаю о композиции концепции над наследованием, как в статье "Композиция над наследством". Я знаю, что дискуссия о наследовании и композиции может быть очень длинной, но я решил избежать наследования в максимально возможной степени (по крайней мере, на данный момент).
Поэтому я хотел бы использовать Mixins так сильно, как я могу, с ES6, и в большинстве примеров я вижу три класса в действии, например, class A extends MixinB(C)
. Что делать, если я хочу расширить только класс B? Будет ли я делать что-то вроде class A extends MixinB(Object)
? Это может быть анти-шаблон, как указано в документации к Mozilla.
Обратите внимание, что я мог бы сделать прямое наследование, например, class A extends B
, но, как этот B
больше не является Mixin, и мне понадобится другое объявление B
если я хотел бы использовать его как Mixin.
Мне не понравилось это!
Поэтому я хотел бы использовать Mixins столько, сколько могу
При необходимости используйте микшины, а не потому, что вы хотите их использовать. Наследование подходит для фиксированных, прочных отношений. Миксины полезны, когда у вас есть небольшая часть функциональности, которую вы хотите разделить с несколькими классами, которые не связаны друг с другом.
Я думаю, что решение для того, что вы ищете, это изменить определение функций Mixin
.
Вместо того, чтобы:
MixinB(WhateverClass)
Вы могли бы:
Mixin(MainClass, otherClass1, otherClass2...)
Где это было бы правдой:
MixinB(C) = Mixin(B, C)