Почему боб сущности считается анемичным?
Я прочитал несколько статей, сообщающих, что бины сущностей в среде Java EE рассматриваются как анемичные (имеется в виду только содержащие геттеры и сеттеры без реализации поведения).
Что мешает мне поместить поведение в бины сущностей? Таким образом, сессионные компоненты (без сохранения состояния или с сохранением состояния) могут делегировать им все бизнес-логики (для логики, имеющей смысл принадлежать сущностям).
Я не понимаю, почему бины сущностей обязательно анемичны.
2 ответа
С чисто семантической точки зрения вы ожидаете, что бин ENTITY будет представлять собой сущность и ее атрибуты. Если вы соедините это с некоторой логикой, тогда вы добавите дополнительную ответственность к вашему классу сущности. И как мы знаем из закона Керли или принципа единой ответственности, каждый класс должен делать одно и только одно:
http://www.codinghorror.com/blog/2007/03/curlys-law-do-one-thing.html
http://en.wikipedia.org/wiki/Single_responsibility_principle
Если вы считаете, что у вас есть достаточно веские основания для нарушения этого принципа, вы можете, но, насколько мне известно, ни одна из причин не была достаточно веской, чтобы нарушать стандартные методы разработки программного обеспечения, особенно если вы, как и я, считаете, что качество программного обеспечения лучше всего представлено качеством его кода.
Нет никаких ограничений по реализации функциональности на бинах сущностей, но они не предназначены для использования в вашем приложении, поэтому большую часть времени вы будете добавлять поведения, которые изменяют сущности на ваших сессионных компонентах только потому, что к сессионным компонентам следует обращаться из передний конец, например.
Если мы пойдем глубже, то методы сессионных компонентов обычно украшаются аспектами транзакций и безопасности, а компоненты - нет, поэтому ваше приложение может не вести себя ожидаемым образом, если вы добавили код в объекты.