Это отличный вопрос, даже если проблема не новая. Как отрасль, мы часто меняли «общепринятые взгляды» на эту тему на протяжении многих лет. Ответы, которые вы получаете сегодня, не обязательно те, которые вы получите 5 лет назад или через 5 лет в будущем.
Представляя, как я бы хотел бы обработать этот элемент, я удивляюсь некоторым вещам, которые вы не заявили: является ли ваше приложение "системой записи" для сущностей Dog? Какие другие подсистемы / слои / приложения должны знать об объектах Dog.
В Java, когда вы пишете совершенно новые типы, такие как Animal> Dog, вы получаете следующее вознаграждение: возможность написать целую кучу кода, который знает, как взаимодействовать с объектами Animal и объектами Dog. В 2010 году я менее убежден, что это хорошая идея, чем пять лет назад.
Вы отвечаете за разработку базы данных, в которой хранится информация о собаке? Раньше мы делали это все время, но в настоящее время я обычно чувствую себя интегрированным с записями данных, которые фактически управляются другими системами: API Google, сущностями LDAP, хранилищами данных, такими продуктами, какoplesoft и т. Д.
Если вы не отвечаете за определение, что такое собаки и как они взаимодействуют со вселенной, я бы посмотрел на независимый от домена способ моделирования информации о собаке в памяти. Есть тонны: XML / DOM, JSON, Map и т. Д.
Преимущества перемещения данных других людей в этих форматах многочисленны ...
- вам не нужно писать POJOs
- они богаты функциями, документацией и тестированием
- существует множество существующих API для преобразования, манипулирования и сериализации этих существ
- вы можете повторно использовать ваш вид / контроллер / другой код в других доменах
С другой стороны ... если вы являетесь системой записи данных Dog, рассмотрите возможность использования интерфейсов вместо абстрактных классов. Или, возможно, интерфейсы и абстрактных классов. Java имеет только одно наследование; привязать ваш view / controller / other code к интерфейсам, чтобы гарантировать максимальную гибкость в будущем.