Personnellement, je pense que l'héritage est un excellent outil, qui, lorsqu'il est appliqué raisonnablement, peut grandement simplifier le code.L'héritage est-il devenu mauvais?
Cependant, il me semble que de nombreux outils modernes n'aiment pas l'héritage. Prenons un exemple simple: sérialiser une classe en XML. Dès que l'héritage est impliqué, cela peut facilement se transformer en désordre. Surtout si vous essayez de sérialiser une classe dérivée en utilisant le sérialiseur de classe de base.
Bien sûr, nous pouvons contourner cela. Quelque chose comme un attribut KnownType
et d'autres choses. En plus d'être un démon dans votre code que vous devez vous rappeler de mettre à jour chaque fois que vous ajoutez une classe dérivée, cela échoue aussi si vous recevez une classe de l'extérieur de votre portée qui n'était pas connue au moment de la compilation. (Bon, dans certains cas, vous pouvez toujours contourner cela, par exemple en utilisant le sérialiseur NetDataContract dans .NET.) Un certain progrès.)
Dans tous les cas, le principe de base existe toujours: Sérialisation et héritage ne se mélangent pas bien. Considérant l'énorme liste de stratégies de programmation qui est devenue possible et même commune au cours de la dernière décennie, je suis tenté de dire que l'héritage devrait être évité dans les domaines liés à la sérialisation (en particulier les communications à distance et les bases de données).
Est-ce que cela a du sens? Ou suis-je en train de tout chambouler? Comment gérez-vous l'héritage et la sérialisation?
mêmes problèmes avec les ORM – Andrey
Serait-ce une autre raison de préférer la composition à l'héritage? –
Je crois que la composition et l'héritage ont chacun leur propre application. Si l'héritage est le meilleur choix des deux, alors je veux vraiment l'utiliser. Je l'ai quand je suis obligé d'utiliser un design inférieur parce que la technologie ne supporte pas le mieux, le design correct. – mafu