Pytanie„Tell, nie pytaj” na wiele kategorii obiektów
Jak mogę stosować się do zasady "Tell, Don't Ask" podczas wykonywania funkcji udziałem wielu obiektów.
Przykład - Generowanie raportu
Mam następujące obiekty (jedynie w celach poglądowych):
Wóz, Koń, Królik
nie ma żadnego związku między tymi obiektami , ale chcę wygenerować raport na podstawie tych obiektów:
createHtmlReport(Car car, Horse horse, Rabbit rabbit){
Report report = new Report()
report.setSomeField(car.getSerialNumber())
report.setAnotherField(horse.getNumberOfLegs())
// ...etc
}
Problem z tą metodą polega na tym, że musi "wyciągnąć" dane z każdego obiektu, co jest niezgodne z zasadą "Powiedz, nie pytaj". Wolałbym zachować wnętrze każdego obiektu ukryte, i mieć je wygenerować raport dla mnie:
car.createHtmlReport()
horse.createHtmlReport()
rabbit.createHtmlReport()
... ale potem dostać 3 raportów cząstkowych. Ponadto, nie sądzę, że królik powinien wiedzieć, jak wygenerować każdy raport, którego potrzebuję (HTML, JMS, XML, JSON ...).
Wreszcie, podczas generowania raportu może chcę, aby przełączyć się na wielu elementów:
if (car.getWheels() == 4 || horse.getLegs() == 4)
// do something
+1 i fav dla linku i pytania. – knownasilya