如何執行涉及多個對象的功能,當我堅持"Tell, Don't Ask"原則。
示例 - 生成報告
我有以下對象(說明目的):
車,馬,兔
有這些對象之間沒有任何關係,但我確實希望根據這些對象生成報告:
createHtmlReport(Car car, Horse horse, Rabbit rabbit){
Report report = new Report()
report.setSomeField(car.getSerialNumber())
report.setAnotherField(horse.getNumberOfLegs())
// ...etc
}
該方法的問題在於它必須從每個對象中「拉出」數據,這違反了「Tell,Do not Ask」規則。我寧願保持隱藏在每個對象的內部,並讓他們爲我生成一個報告:
car.createHtmlReport()
horse.createHtmlReport()
rabbit.createHtmlReport()
......但後來我得到3頁的報告。此外,我不認爲兔子應該知道如何生成我需要的每個報告(HTML,JMS,XML,JSON ....)。
最後,同時生成我可能要對多個項目進行切換的報告:
if (car.getWheels() == 4 || horse.getLegs() == 4)
// do something
+1&fav用於鏈接和問題。 – knownasilya 2012-12-06 21:54:16