Как использовать Mixins для каждого типа наследования?

1

Недавно я видел концепцию 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.

  • 0
    «Наследование - это не всегда правильный образец», не означает «рожать эту новую вещь, которую вы узнали в каждом месте, где вы ранее использовали наследство».
  • 1
    Остерегайтесь блоггеров JavaScript, которые неправильно сочетают композицию. reddit.com/r/programming/comments/5dxq6i/… . Миксины и множественное наследование - это одно и то же, но они не являются композицией.
Показать ещё 4 комментария
Теги:
class
design-patterns
inheritance
mixins

2 ответа

0

Мне не понравилось это!

Поэтому я хотел бы использовать Mixins столько, сколько могу

При необходимости используйте микшины, а не потому, что вы хотите их использовать. Наследование подходит для фиксированных, прочных отношений. Миксины полезны, когда у вас есть небольшая часть функциональности, которую вы хотите разделить с несколькими классами, которые не связаны друг с другом.

  • 0
    Пожалуйста, не думайте, что я пытаюсь сделать мой код хуже с Mixins, я говорю, что «я хотел бы использовать Mixins столько, сколько я могу» и под словом «могу» я имею в виду, так что здесь лучше использовать наследование? Использование Mixin было бы хакерским для неоправданного? Хорошо, я буду использовать наследование ". Ваш ответ больше похож на комментарий, так как вы не отвечаете на вопрос, который я задал.
0

Я думаю, что решение для того, что вы ищете, это изменить определение функций Mixin.

Вместо того, чтобы:

MixinB(WhateverClass)

Вы могли бы:

Mixin(MainClass, otherClass1, otherClass2...)

Где это было бы правдой:

MixinB(C) = Mixin(B, C)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню