O Especialista em Informações e o Tell não questionam o Princípio da Responsabilidade Única?

Informação-Especialista, Diga-não-peçaeSRP são frequentemente mencionados juntos como melhores práticas. Mas eu acho que eles estão em desacordo. Aqui está o que eu estou falando.

Código que favorece o SRP, mas viola o Tell-Don't-Ask e o 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); 

Código que favorece Tell-Don't-Ask e Info-Expert, mas viola o SRP:

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

Por favor, preencha-me sobre como essas práticas podem coexistir pacificamente.

Definições dos termos,

Especialista em Informações: objetos que possuem os dados necessários para uma operação devem hospedar a operação.

Diga não pergunte: não peça dados aos objetos para fazer o trabalho; diga aos objetos para fazer o trabalho.

Princípio da Responsabilidade Única: cada objeto deve ter uma responsabilidade estritamente definida.

questionAnswers(6)

yourAnswerToTheQuestion