Dans le monde java (plus précisément si vous n'avez pas l'héritage multiple/mixin) la règle de base est assez simple: "le Profit de l'objet de la composition au cours de l'héritage de classe".
J'aimerais savoir si et comment il est changé si vous aussi vous envisagez de mixin, en particulier dans les scala?
Sont mixin considéré comme un moyen de l'héritage multiple, ou plus de la composition de classe?
Est-il aussi un "en Faveur de l'objet de la composition au cours de la composition de classe" (ou l'inverse) la directive?
J'ai vu assez quelques exemples lorsque les gens utilisent (ou l'abus) mixin lors de la composition d'objet pourrait aussi faire le travail et je ne suis pas toujours sûr que l'on est mieux. Il me semble que vous pouvez réaliser tout à fait les mêmes choses avec eux, mais il ya quelques différences aussi, quelques exemples:
- visibilité - avec mixin tout devient une partie de l'api publique, ce qui n'est pas le cas avec la composition.
- verbosité - dans la plupart des cas mixin sont moins détaillées et un peu plus facile à utiliser, mais il n'est pas toujours le cas (par exemple si vous aussi vous utilisez des types de hiérarchies complexes)
Je sais que la réponse est "Ça dépend", mais il y a probablement certains situation typique lorsque ceci ou cela, c'est mieux.
Quelques exemples de lignes directrices j'ai pu arriver jusqu'ici (en supposant que j'ai deux traits A et B et Un veut utiliser certaines méthodes de B):
- Si vous voulez prolonger l'API de Un avec les méthodes de B puis mixin, sinon la composition. Mais cela n'aide pas si la classe/instance que je suis de la création ne fait pas partie d'une API publique.
- Si vous souhaitez utiliser certains des motifs qui ont besoin de mixin (par exemple, Empilable Trait Motif) ensuite c'est une décision facile à prendre.
- Si vous avez des dépendances circulaires puis mixin avec l'auto types peuvent aider. (J'essaie d'éviter cette situation, mais il n'est pas toujours facile)
- Si vous voulez un peu de dynamique, d'exécution des décisions de façon de faire, puis la composition objet de la composition.
Dans de nombreux cas, mixin semble plus facile (et/ou moins détaillé), mais je suis tout à fait sûr qu'ils ont aussi quelques pièges, comme le "Dieu de la classe" et d'autres ont décrit en deux artima articles: partie 1, partie 2 (d'ailleurs il me semble que la plupart des autres problèmes ne sont pas pertinents ou pas si grave pour la scala).
Vous avez d'autres astuces comme celle-ci?