Что будет стоить больше усилий и времени?
Разделение почти всегда стоит. Это компромисс!
Являются ли оба подхода приемлемыми в качестве практики?
Да. Я вижу, что есть много противоречивых мнений по обоим подходам, но на самом деле, это просто мнения. Оба применяются и стоимость.
Каковы плюсы и минусы обоих?
Использование сущностей JPA в качестве доменных сущностей действительно 1 - сокращает временные затраты, условно. 2- Также позволяет использовать ленивую загрузку со связями, избегая большего количества кода в сервисе приложений, что, если вы не следите за ссылками на другие агрегаты по идентификатору, который также основан на мнениях, но действительно стоит ленивая загрузка JPA.
Одним из недостатков этого подхода является модульное тестирование, как мне кажется. Модульный тест не должен зависеть от запуска контейнера, базы данных ... et c. Стоит чисто проверить бизнес логи c. Но это не оптимально возможно с такими структурами. См. Этот ответ, например:
Объект JPA должен быть модульно протестирован и как?
Использование JPA в качестве отдельных объектов в инфраструктуре с репозиториями-оболочками облегчит имитацию модульных тестов данные и тестирование чисто предметно (бизнес-правила) с комфортом. Это будет обратно к предыдущим доводам "за", обойдется вам в усилиях по отображению и времени, слишком много дублирующего кода для сопоставления, обертывания репозиториев .. и т. Д. c. Это приносит головную боль (и это должно быть про) заботы о том, каково состояние вашей доменной сущности, потому что сопоставление нулей и сущности JPA повлияет на сопоставление отношений с вашим источником постоянства, и вы действительно должны заботиться для состояния вашей доменной сущности.
Также автоматическая c отложенная загрузка ORM не будет использоваться и выполняться легко. Либо
1- Вы помещаете ссылку на другие агрегаты в качестве члена в агрегате root (нарушение правила ссылки на идентификатор агрегата) и обрабатываете это в преобразователях
2- Вы получаете из репозитория нужны только данные агрегата root с идентификатором другого агрегата в качестве ссылочных элементов. Это делается с помощью четко определенных запросов в реализации репозитория, поэтому это много написания и настройки запросов. Избегайте использования значений по умолчанию, которые возвращают полные сущности JPA с готовыми ссылками на ленивую загрузку.