Я пытался создать поток для базового многоуровневого веб-приложения и читал противоречивую информацию в Интернете. Я пытаюсь выяснить, есть ли преимущество в том, чтобы все еще использовать объекты DTO от вашего DAO до уровня Service через использование какого-то рода мапперов.
Основной поток, который я предвижу, выглядит следующим образом:
- Модель пользовательского интерфейса -> Контроллер
- Контроллер преобразует модель в доменный объект (объект)
- Доменный объект -> Сервисный уровень
- Доменный объект -> DAO
- DAO -> Доменный объект (ы)
- Сервис -> Интерфейс
- Пользовательский интерфейс преобразует домен в модели пользовательского интерфейса
Если следовать DTO, DAO вернет DTO, а не Организацию. После некоторого чтения кажется, что DTO немного перестал существовать, поскольку (по крайней мере, в Java) объекты стали аннотированными POJO, что означает, что их объем памяти стал очень маленьким.
Так ли это, или следует использовать DTO для полной инкапсуляции объектов домена на уровне DAO, и, если это так, что бы уровень обслуживания передавал DAO?
Огромное спасибо!
Одна из причин, по которой я думаю, что эта дискуссия повторяется неоднократно, заключается в том, что мне кажется, что очень трудно получить объект со всеми необходимыми данными и преобразовать его в объект, который выглядит идентичным или почти идентичным ты сдаешь.
Это правда, это ПИТА. Но для этого есть несколько причин (помимо перечисленных выше).
Но вы можете управлять им достаточно эффективно, если инкапсулируете логику перевода в коллекцию классов преобразователей.
Взгляните на lambdaJ, где вы можете выполнить команду 'convert (domainObj, toDto)', но есть перегрузка для использования с коллекциями. Вот пример метода контроллера, который использует его. Как видите, все выглядит не так плохо.
источник