Pourquoi le sous-classement est-il trop mauvais
«Trop» est un appel au jugement; mais prenez-le moi c'est mauvais. Le code avec lequel je travaille a l'héritage DEEP et le code est sacrément difficile à lire, à comprendre, à suivre, à tracer, à déboguer, etc. etc. Il est effectivement impossible d'écrire du code de test pour ce genre de choses.
Le modèle de prototype supprime le sous-classement
Ou la question signifie-t-elle "supprime trop de sous-classes?". Ce modèle nécessite le clonage d'un objet "modèle" pour éviter le sous-classement, au moins à ce stade. Aucune règle ne dit que le "modèle" ne peut pas être une sous-classe.
Privilégier la composition à l'héritage
Cette idée comprend également la délégation et l'agrégation. Suivre cette heuristique signifie que votre logiciel a tendance à être plus flexible, plus facile à maintenir, à étendre et à réutiliser.
Lorsqu'une classe est composée de parties, vous pouvez les remplacer au moment de l'exécution . Cela a un effet profond sur la testabilité.
Les tests sont plus faciles . Vous pouvez utiliser de fausses pièces (c'est-à-dire des "simulacres", des "doubles" et d'autres tests de conversation). L'héritage profond de notre code signifie que nous devons instancier toute la hiérarchie pour en tester n'importe quel morceau. Dans notre cas, cela n'est pas possible sans exécuter le code dans son environnement réel. Par exemple, nous avons besoin d'une base de données pour instancier des objets métier.
Les changements s'accompagnent d'effets secondaires et d'incertitude - Plus la classe est «fondée», plus les effets sont répandus, pour le meilleur ou pour le pire. Il y a peut-être des changements souhaités que vous n'oserez pas faire en raison de l'incertitude des effets secondaires. Ou un changement qui est bon pour un endroit de notre chaîne d'héritage est mauvais pour un autre. C'est certainement mon expérience.