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.