Лично я считаю наследование отличным инструментом, который при разумном применении может значительно упростить код.
Однако мне кажется, что многие современные инструменты не любят наследование. Давайте рассмотрим простой пример: сериализация класса в XML. Как только наследование вовлечено, это может легко превратиться в беспорядок. Особенно, если вы пытаетесь сериализовать производный класс, используя сериализатор базового класса.
Конечно, мы можем обойти это. Что-то вроде KnownType
атрибута и прочего. Помимо того, что вы испытываете зуд в своем коде, который вы должны помнить, чтобы обновлять каждый раз, когда вы добавляете производный класс, это также может дать сбой, если вы получите класс из-за пределов вашей области действия, которые не были известны во время компиляции. (Хорошо, в некоторых случаях вы все еще можете обойти это, например, используя сериализатор NetDataContract в .NET. Конечно, определенное улучшение.)
В любом случае, основной принцип все еще существует: сериализация и наследование плохо сочетаются. Рассматривая огромный список стратегий программирования, которые стали возможными и даже распространенными в последнее десятилетие, я испытываю соблазн сказать, что следует избегать наследования в областях, связанных с сериализацией (в частности, удаленное взаимодействие и базы данных).
Это имеет смысл? Или все портит? Как вы справляетесь с наследованием и сериализацией?