Domanda"Tell, Do not Ask" sopra il dominio più oggetti
Come posso aderire al principio "Tell, Don't Ask" nello svolgimento di una funzione che coinvolge più oggetti.
Esempio - Generazione di un rapporto
Ho i seguenti oggetti (scopi illustrativi):
Automobile, Cavallo, Coniglio
Non v'è alcuna relazione tra questi oggetti , ma voglio generare un rapporto basato su questi oggetti:
createHtmlReport(Car car, Horse horse, Rabbit rabbit){
Report report = new Report()
report.setSomeField(car.getSerialNumber())
report.setAnotherField(horse.getNumberOfLegs())
// ...etc
}
Il problema con questo metodo è che deve "estrarre" i dati da ciascun oggetto, che viola la regola "Tell, Do not Ask". Avrei preferito mantenere l'interno di ogni oggetti nascosti, e li hanno generare un rapporto per me:
car.createHtmlReport()
horse.createHtmlReport()
rabbit.createHtmlReport()
... ma poi ho ottenere 3 rapporti parziali. Inoltre, non penso che un Coniglio debba sapere come generare ogni singolo rapporto di cui ho bisogno (HTML, JMS, XML, JSON ....).
Infine, mentre la generazione del rapporto mi può essere utile per accendere più elementi:
if (car.getWheels() == 4 || horse.getLegs() == 4)
// do something
+1 & fav per collegamento e domanda. – knownasilya