¿No son expertos y expertos en información no preguntes en desacuerdo con el principio de responsabilidad única?
Información-Experto, Decir-no-preguntarySRP A menudo se mencionan juntos como mejores prácticas. Pero creo que están en desacuerdo. Aquí es de lo que estoy hablando.
Código que favorece a SRP pero viola Tell-Don't-Ask & 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 a Tell-Don't-Ask & Info-Expert pero viola el SRP:
Customer bob = ...;
// Now Customer is doing more than just representing the domain concept of Customer,
// violates SRP
CustomerDTO dto = bob.toDTO();
Por favor, infórmeme sobre cómo estas prácticas pueden coexistir pacíficamente.
Definiciones de los términos,
Experto en información: los objetos que tienen los datos necesarios para una operación deben hospedar la operación.
Diga No pregunte: no le pida a los objetos datos para poder trabajar; Dile a los objetos que hagan el trabajo.
Principio de responsabilidad única: cada objeto debe tener una responsabilidad estrechamente definida.