Hibernate дизайн шаблона вопрос - PullRequest
1 голос
/ 22 января 2011

Я работаю с Hibernate.Работает отлично.Тем не менее, скажем, что у меня есть класс, который соответствует таблице базы данных с только getters и setters и toString, равными методами.Теперь я хотел бы добавить еще несколько методов для помощи цели, например, сказать, что я хотел бы получить дату создания с некоторым дополнительным текстом описания, как показано ниже.разместить этот метод?

Должен ли я добавить его в тот же класс, что и объект Value, или поместить его в другое место?Я хотел бы узнать лучшие практики, если вы знаете, что я имею в виду =)

С уважением

Ответы [ 3 ]

5 голосов
/ 22 января 2011

Божо в общих чертах обрисовал два возможных подхода: богатая модель и анемичная модель , и предложил расширенную модель как более OOPish.Здесь я буду отстаивать анемичный подход.

Функциональность, которую вы описываете, выглядит как обязанность уровня представления.Я думаю, что было бы лучше поместить его в классы, связанные с пользовательским интерфейсом, а не в модель предметной области.

Помещение в модель предметной области выглядит безвредным, если логика проста, как

return "Date in secs: " + creationDate.getTimeInMillis * 1000;

Однако представьте, что вы получили дополнительное требование для возврата локализованного описания.Вам нужно будет добавить зависимости от средств локализации в модель вашего домена, что увеличит сцепление вашего кода.

Таким образом, лучше разделять обязанности между различными уровнями.

4 голосов
/ 22 января 2011

Абсолютно без проблем при добавлении метода в сущность. Это где он принадлежит, потому что он воздействует на внутреннее состояние объекта.

Вы можете создать служебный метод, например ClientUtils.getCreationDateInSeconds(client), но это скорее не OOP.

0 голосов
/ 26 мая 2011

Если вас беспокоит смешивание ваших сущностей со многими подобными методами, и у вас есть много методов DAO, вы можете рассмотреть возможность использования Аспектно-ориентированного подхода.

Это позволит вам отделить чистые сущности,материал DAO и другие служебные методы в отдельных «аспектах» без нарушения принципов OO.

Spring и AspectJ делают это хорошо.Если вам нужен быстрый пример того, как все реализовано, посмотрите здесь: http://static.springsource.org/spring-roo/reference/html/architecture.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...