Mixins против композиции в скале

В мире Java (точнее, если у вас нет множественного наследования / миксинов), практическое правило довольно простое: «Пользуйся композицией объектов по наследованию классов».

Я хотел бы знать, если / как это изменилось, если вы также рассматриваете миксины, особенно в Scala?
Считаются ли миксины способом множественного наследования или составления классов?
Существует ли также рекомендация «Композиция объекта Favor поверх композиции класса» (или наоборот)?

Я видел довольно много примеров, когда люди используют (или злоупотребляют) миксины, когда объектная компоновка также может выполнять свою работу, и я не всегда уверен, какой из них лучше. Мне кажется, что вы можете достичь схожих результатов с ними, но есть и некоторые отличия, например:

видимость - с миксином все становится частью публичного API, чего нельзя сказать о композиции.многословие - в большинстве случаев миксины менее многословны и немного проще в использовании, но это не всегда так (например, если вы также используете собственные типы в сложных иерархиях)

Я знаю, что короткий ответ «Это зависит», но, вероятно, есть некоторые типичные ситуации, когда то или иное лучше.

Некоторые примеры руководств, которые я мог бы придумать до сих пор (при условии, что у меня есть две черты A и B, и A хочет использовать некоторые методы из B):

Если вы хотите расширить API A с помощью методов из B, тогда mixins, иначе состав. Но это не помогает, если создаваемый мной класс / экземпляр не является частью публичного API.Если вы хотите использовать некоторые паттерны, которые нуждаются в миксинах (например,Набор стекируемых черт) тогда это простое решение.Если у вас есть циклические зависимости, то могут помочь миксины с типами. (Я пытаюсь избежать этой ситуации, но это не всегда легко)Если вам нужны динамические решения во время выполнения, как сделать композицию, а затем композицию объекта.

Во многих случаях миксины кажутся более простыми (и / или менее многословными), но я вполне уверен, что у них также есть некоторые подводные камни, такие как «класс Бога» и другие, описанные в двух статьях artima:часть 1, часть 2 (Кстати, мне кажется, что большинство других проблем не имеют отношения / не так серьезно для скалы).

У вас есть еще подобные подсказки?

Ответы на вопрос(2)

Ваш ответ на вопрос