如何执行涉及多个对象的功能,当我坚持"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