Сокрытие реализации требует, чтобы мы скрыли внутреннюю структуру класса от пользователя. Скажем для простоты: свести количество геттеров/сеттеров к минимуму.
Разделение интересов требует, чтобы для изменения класса была только одна причина. Таким образом, нельзя позволять классу сервисного уровня делать вещи сервисного уровня, например, и сохранять данные в хранилище данных.
Объекты передачи данных (DTO) используются для передачи данных с сервисного уровня на уровень доступа к данным.
Чтобы построить DTO, мне нужно, в худшем случае, прочитать все члены класса сервисного уровня. Для этого потребуется максимальное количество геттеров, что нарушает скрытие реализации.
Создание классов, которые должны быть преобразованы в DTO, из общего Storable
абстрактного базового класса с виртуальным методом Dto buildDto()
нарушит разделение задач.
Можете ли вы порекомендовать стратегии борьбы с этим? Или действительно существует общепринятая практика в этом отношении?