Pregunta"Tell, no preguntar" sobre varios objetos de dominio
¿Cómo se adhieren al principio "Tell, Don't Ask" al realizar una función de la participación de múltiples objetos.
Ejemplo - Generación de un informe
tengo los siguientes objetos (título ilustrativo):
coche, caballo, conejo
no hay ninguna relación entre estos objetos , pero sí quiero generar un informe basado en estos objetos:
createHtmlReport(Car car, Horse horse, Rabbit rabbit){
Report report = new Report()
report.setSomeField(car.getSerialNumber())
report.setAnotherField(horse.getNumberOfLegs())
// ...etc
}
El problema con este método es que tiene que "extraer" datos de cada objeto, lo que infringe la regla "Decir, no preguntar". Yo prefiero mantener el interior de cada objeto oculto, y hacer que se genere un informe para mí:
car.createHtmlReport()
horse.createHtmlReport()
rabbit.createHtmlReport()
... pero entonces obtener 3 informes parciales. Además, no creo que un Conejo deba saber cómo generar cada informe que necesito (HTML, JMS, XML, JSON ...).
Por último, mientras que la generación del informe es posible que quiera cambiar en varios elementos:
if (car.getWheels() == 4 || horse.getLegs() == 4)
// do something
+1 y favorito para el enlace y la pregunta. – knownasilya