Является ли хорошей практикой использование объектов JPA в качестве моделей доменов?

или создать доменный уровень, состоящий из моделей домена, и поговорить с объектами JPA для доступа к базе данных? Каковы плюсы и минусы для обоих подходов? Спасибо!

Ответ 1

Это действительно зависит от того, как вы кодируете свой домен.

В целом (на Java) я предпочитаю создавать отдельный набор JPA-аннотированных DTO для работы с сохранением. Такие DTO будут соответствовать таблице db и будут использоваться в пользовательском репозитории, который

  • предоставит клиентам семантический API
  • будет запускать запросы против таких DTO
  • будет использовать фабрики для инициализации объектов домена для возврата к клиентам

Этот подход делает модели домена действительно отделенными от схемы db, так что вы можете эволюционировать независимо друг от друга. Недостатки этого подхода заключаются в том, что у вас есть больше кода для написания, но я считаю, что такой код довольно легко и дешево написать поддержку.

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