Уровень преобразований DTO

#java #oop #model-view-controller #architecture

#java #ооп #модель-представление-контроллер #архитектура

Вопрос:

Контроллер должен работать с DTO, обслуживать модели предметной области. Для связи между контроллером и сервисом, какое лучшее место для преобразования из DTO в модели, в контроллере или сервисе? А также, какое лучшее место для построения DTO после выполнения служебной логики?

Комментарии:

1. вы можете написать отдельные MappingUtils, которые будут сопоставлять DTO с моделями, а models — с DTO

Ответ №1:

Лучшим местом для преобразования из DTO в модели и наоборот является Mapper.

Вы не должны помещать логику преобразования в код службы, потому что DTO может использоваться несколькими службами. Помещение его в код службы делает его привязанным к одному конкретному сервису. Не решение.

Вы не должны помещать логику преобразования в контроллер, потому что сервисы, чтобы что-то преобразовать, становятся зависимыми от контроллера. Не решение.

Создайте Mapper интерфейс. Предоставьте для этого реализацию (вы даже можете использовать библиотеку для сопоставления, например ModelMapper). И используйте этот mapper для преобразования, когда вам нужно.

Комментарии:

1. спасибо за ответ, и mapper должен выполняться с контроллера, верно? и после получения результатов от сервиса нам нужно снова подготовить DTO с помощью mapper, который выполняется из контроллера, правильно?