Есть backend на Spring (REST) который отдает наружу DTO в JSON формате, само приложение разделено
на слои: контроллеры (взаимодействие с внешним миром), сервисы (вся бизнес-логика), dao (работа с БД).
Не дает покоя вопрос где (и как) лучше осуществлять преобразование Entity->DTO и обратно.
Мне видится несколько вариантов:
1. методы toDTO, fromDTO в контроллере
+ DTO используются только в контроллерах, где им в общем-то и место
- у контроллеров появляются ненужные зависимости
- нарушается принцип единой ответственности
2. методы toDTO, fromDTO в сервисе
+ если рассматривать такое преобразование как часть бизнес-логики, то это правильное место
- а если нет, то опять же нарушается принцип единой ответственности
3. отдельные helpers бины
+ может использоваться независимо в разных частях приложения
- в зависимости от реализации может потребовать создания "лишних" методов в сервисном слое
или управления транзакциями
4. всякие "магические" штуки вроде Converter, Formatter, Dozer, ModelMapper и т.п.
Сейчас использую вариант 2, но склоняюсь к 3-му.
Кто что думает по этому поводу?