2015-03-12 3 views
1

Я работаю над старым проектом с спящим режимом. Иногда я нахожу код, где разработчики написали дополнительный код в заданных методах объектов сущности. Мне интересно, если это общепринятая практика? Не должны ли спячки объектов объекта быть классами pojo с дополнительными аннотациями и, возможно, несколькими вспомогательными методами @Transient?Дополнительные действия в сеттере объекта спящего режима

Если вы хотите сделать дополнительные действия, это не ответственность службы/дао, работающей с сущностью?

Какая практика? Кто-нибудь знает о блоге или признанной статье, объясняющей это?

+1

Оба подхода правильные, ИМХО. Поиск анемией модели против ДДД –

+0

Ну я прочитал follwing Записей по вики http://en.wikipedia.org/wiki/Anemic_domain_model http://en.wikipedia.org/wiki/Domain-driven_design понятия, которые я сделал знаю уже, но я все еще интересуюсь ситуацией в спящем режиме, какой лучший подход. После прочтения этой вики, я должен был бы признать, что логика записи в сущности является истинным способом OO. Но почему у вас есть уровень бизнес-логики с услугами, если вы пишете все на своем доменном уровне? – kenny

+1

HIbernate достаточно гибкий; он позволяет вам принять любой подход, который вы хотите. Производительность не будет зависеть от этого решения, а от запросов, выбора стратегий для сущностей, выбранных algorthms, ввода-вывода, параллельного выполнения и т. Д. Если вы перейдете к DDD, объекты находятся на бизнес-уровне, а сам Hibernate (Session, SessionFactory и весь ORM) будет частью уровня сохранения. –

ответ

1

ИМХО, оба подхода верны. У обоих есть свои плюсы и минусы. Это связано с вечной войной Anemic model vs DDD (Domain-driven design).

Что касается Hibernate, он довольно гибкий. Это позволяет вам принять любой подход, который вы хотите. Производительность и правильность решения не зависят от принятого вами решения, а от правильности запросов, индексов базы данных, стратегий выбора для сущностей, выбранных алгоритмов, обработки ввода-вывода, реализации параллелизма, управления транзакциями и т. Д.

Если вы перейдете к DDD, объекты будут частью бизнес-уровня, тогда как сам Hibernate (Session, SessionFactory и весь ORM) будет частью уровня сохранения. В этом случае сущности будут содержать аннотации, связанные с постоянством, которые были бы только намеками для ORM.

Вы также должны быть осторожны с управлением транзакциями. Это лучше выполняется за пределами сущностей. (На самом деле одним из основных преимуществ анемической модели является то, что управление транзакциями очень просто, потому что вы переносите каждый метод обслуживания вашего бизнес-уровня внутри транзакционной единицы).

Как вы уже упоминали, у вас есть сочетание обеих идеологий, возможно, вы могли бы использовать этот факт в качестве преимущества: позволить методам службы делегировать логику субъектам домена, но сохранить управление транзакциями в ваших бизнес-сервисах.

Смежные вопросы