Разве Информационный Эксперт и Скажи, Не спрашивай в противоречии с принципом Единой Ответственности?

Информационно-Expert, Скажи-не-Ask, а такжеSRP часто упоминаются вместе как лучшие практики. Но я думаю, что они расходятся. Вот о чем я говорю.

Код, который поддерживает SRP, но нарушает принцип «говорите, не спрашивайте» и «Info-Expert»:

Customer bob = ...;
// TransferObjectFactory has to use Customer's accessors to do its work, 
// violates Tell Don't Ask
CustomerDTO dto = TransferObjectFactory.createFrom(bob); 

Код, который поддерживает функцию «говорите, не спрашивайте» и «эксперт по информации», но нарушает SRP:

Customer bob = ...;
// Now Customer is doing more than just representing the domain concept of Customer,
// violates SRP
CustomerDTO dto = bob.toDTO();

Пожалуйста, напишите мне, как эти практики могут мирно сосуществовать.

Определения терминов,

Информационный эксперт: объекты, которые имеют данные, необходимые для операции, должны содержать операцию.

Скажите не спрашивайте: не запрашивайте у данных данные для выполнения работы; сказать объектам, чтобы сделать работу.

Принцип единой ответственности: каждый объект должен иметь узко определенную ответственность.

Ответы на вопрос(6)

Ваш ответ на вопрос