Лично я считаю, что наследование - отличный инструмент, который при разумном применении может значительно упростить код.Имеет ли наследство плохое?
Однако, мне кажется, что многие современные инструменты не любят наследование. Давайте рассмотрим простой пример: Сериализовать класс в XML. Как только наследование задействовано, это может легко превратиться в беспорядок. Особенно, если вы пытаетесь сериализовать производный класс, используя сериализатор базового класса.
Несомненно, мы можем обойти это. Что-то вроде атрибута KnownType
. Помимо того, что вы испытываете зуд в своем коде, который вы должны помнить, чтобы обновлять каждый раз при добавлении производного класса, это также терпит неудачу, если вы получаете класс извне вашей области действия, который не был известен во время компиляции. (Хорошо, в некоторых случаях вы все равно можете обойти это, например, используя сериализатор NetDataContract в .NET. Конечно, некоторое продвижение.)
В любом случае основной принцип все еще существует: Сериализация и наследование не смешиваются Что ж. Учитывая огромный список стратегий программирования, которые стали возможными и даже обычными в последнее десятилетие, я испытываю соблазн сказать, что наследование следует избегать в областях, связанных с сериализацией (в частности, удалением и базами данных).
Это имеет смысл? Или я все испортил? Как вы обрабатываете наследование и сериализацию?
те же проблемы с ORM – Andrey
Можно ли назвать это еще одной причиной, чтобы предпочесть композицию над наследованием? –
Я считаю, что у композиции и наследования есть свое приложение. Если наследование является лучшим выбором из двух, то я действительно хочу его использовать. Я __hate__ это, когда я вынужден использовать более низкий дизайн, потому что технология не поддерживает лучший дизайн _correct_. – mafu