Probablemente sea solo yo, por eso estoy haciendo la pregunta. Information Expert, Tell Do not Ask y SRP a menudo se mencionan juntos como mejores prácticas. Pero creo que están en desacuerdo. Esto es lo que estoy hablando:¿No es información experta/informativa que no se contradiga con el principio de responsabilidad única?
Códigoque favorece SRP pero viola Dile No preguntar, Información Experto:
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 Dile No preguntar/Información de expertos, pero viola SRP:
Customer bob = ...;
// Now Customer is doing more than just representing the domain concept of Customer,
// violates SRP
CustomerDTO dto = bob.toDTO();
Si están en desacuerdo, eso es una reivindicación de mi TOC. De lo contrario, infórmenme sobre cómo estas prácticas pueden coexistir pacíficamente. Gracias.
Editar: alguien quiere una definición de los términos -
información Expert: Los objetos que tienen los datos necesarios para la operación debe acoger la operación
Dile No preguntar: no pregunte objetos para datos para hacer el trabajo; decir a los objetos para hacer el trabajo
Responsabilidad solo principio: cada objeto debe tener una responsabilidad en sentido estricto
Una pequeña presentación de los términos que está utilizando podría haber sido útil. – shoosh
La respuesta corta es sí ... la larga es que a veces las personas (académicos) se quedan con la cabeza tan metida en el culo que olvidan que la programación aún no es una ciencia perfecta, ... no tenemos un lenguaje que sea lo suficientemente limpio como para satisfacer todos estos principios. Rompe el principio de que tiene más sentido. – Stimul8d
Su segundo ejemplo infringe SRP, pero realmente no es un buen ejemplo de Tell Do not Ask. – koenmetsu