Идея объединения данных и бизнес-логики заключается в том, чтобы продвигать инкапсуляцию и подвергать как можно меньше внутреннего состояния другим объектам. Таким образом, клиенты могут полагаться на интерфейс, а не на реализацию.См. Принцип "Tell, Don't Ask" и код Law of Demeter. Инкапсуляция облегчает понимание состояния данных, которые могут быть в состоянии, проще читать код, легче отделять классы и, как правило, проще проводить единичный тест.
Внешняя бизнес-логика (как правило, в классах «Сервис» или «Менеджер») задает такие вопросы, как «где используются эти данные?». и «В каких штатах оно может быть?» гораздо труднее ответить. Это также процедурный образ мышления, завернутый в объект. Это может привести к anemic domain model.
Внешнее поведение не всегда плохое. Например, service layer может организовывать объекты домена, но не перехватывая их обязанности по управлению состоянием. Или, когда вы в основном делаете чтение/запись в БД, которые хорошо рисуют для ввода форм, может быть, вам не нужна модель домена - или болезненное объектно-реляционное отображение, которое оно влечет за собой.
Передача объектов часто служит для отстранения архитектурных слоев друг от друга (или от внешней системы) путем предоставления минимальной информации о состоянии, которой требует вызывающий уровень, без раскрытия какой-либо бизнес-логики.
Это может быть полезно, например, при подготовке информации для представления: просто дать мнению, необходимую ему информацию, и ничего больше, так что он может сосредоточиться на как для отображения информации, а не , что информация для отображения. Например, TO может представлять собой совокупность нескольких источников данных.
Одно из преимуществ заключается в том, что ваши представления и объекты домена разделены. Использование ваших доменных объектов в JSP может сделать ваш домен более сложным для рефакторинга и поощряет неизбирательное использование геттеров и сеттеров (следовательно, прерывание инкапсуляции).
Однако есть также накладные расходы, связанные с наличием большого количества объектов переноса и часто много дублирования. Некоторые проекты, с которыми я столкнулся, - это то, что в основном отражают другие объекты домена (которые я считаю анти-шаблоном).
Спасибо :). Не могли бы вы объяснить, что вы подразумеваете под «истинными» объектами домена? – 2008-09-21 05:46:06