Есть ли действительно практичный способ избежать использования DTO при передаче данных через методы транзакционных сервисов с поддержкой Hibernate? Другими словами, являются ли DTO единственным не хакерским решением, позволяющим избежать проблем с ленивой инициализацией?
Я думаю, что две популярные альтернативы DTO и причины, по которым они мне не очень нравятся:
Открыть сеанс в шаблоне представления. Это мне не нравится, так как я хотел бы, чтобы методы обслуживания были действительно транзакционными (т.е. сеанс Hibernate фиксируется и закрывается при выходе из метода). Это в основном потому, что я хотел бы не беспокоиться о транзакциях, если мне, например, нужно позже опубликовать службу как веб-службу.
Передача доменных/бизнес-объектов через сервисные методы вместо DTO и нетерпеливое получение необходимых атрибутов/свойств. Это несколько лучше. Однако в нетривиальной иерархии объектов предметной области со сложными отношениями сущностей нетерпеливое извлечение должно где-то остановиться. И когда это произойдет, я не понимаю, как это не может очень быстро превратиться в полный хакатон, заменяющий сущности ссылками на идентификаторы повсюду.
Я что-то упустил или DTO на самом деле единственный надежный подход с точки зрения ремонтопригодности?