Модель предметной области и модель сущности одинаковы - PullRequest
4 голосов
/ 16 декабря 2011

У меня есть модель предметной области, разработанная на основе концепции DDD, в значительной степени объектно-ориентированная, и в ней есть как состояние, так и поведение.Проблема в том, чтобы использовать Hibernate, все сохраняющиеся атрибуты должны иметь методы получения и установки.Это не привлекательно, так как я не хочу вводить сеттер для некоторых атрибутов моих доменных объектов.Должен ли я вместо этого сопоставить мой объект домена с DTO, единственная цель которого - поддерживать только данные.

1 Ответ

3 голосов
/ 16 декабря 2011

В общем, два понятия одинаковы. Модель предметной области используется для описания модели ваших объектов с точки зрения предметной области (т. Е. Информации, используемой для решения конкретной проблемы или набора проблем), а модель сущностей используется для описания модели ваших объектов с точка зрения системы действующих лиц (во многих случаях это приложение, которое использует модель для решения проблем и действует на сущности).

Итак, в общем, это одно и то же.

Тем не менее, Hibernate является очень гибким и, в общем, не требует, чтобы вы многое делали со структурой своих постоянных объектов. Ключ все в том, как вы определяете сопоставления. В любом случае, я бы не предложил бы иметь DTO, чтобы справиться с сохранением данных. Hibernate делает все это внутренне, используя прокси ... это его работа. Добавление большего количества классов только увеличивает сложность вашего приложения и не дает особых преимуществ. Большая сложность почти никогда хорошая вещь.

С Hibernate у вас могут быть частные сеттеры или Hibernate работает только с полями и полностью игнорирует геттеры / сеттеры. В первом случае вы все еще вводите сеттер, но он является закрытым и поэтому не влияет на публичный API класса. При доступе к полю Hibernate не нуждается в любом получателе или установщике для свойства, но он также обходит любую логику, с которой вам, возможно, приходилось делать другие вещи, такие как set transient (непостоянный) ) свойства на ваших объектах.

Прочтите руководство по Hibernate, особенно в разделе о отображении. Это действительно гибкий ORM, который не ограничивает вас больше, чем нужно.

...