程序中经常会有某个场景:
获取某个Domain对象例如Person的集合List<Person>,遍历,对其中每个对象进行处理。例如
这样没有什么问题,但并不合理,因为对其中for循环的测试,就必须放在Service的PrintAddressOf的测试中。
其根本原因是List只是一种数据结构,而不是对象,所以很难单独测试。这是一个设计问题,比较合理的设计是引入一个People class,用来表示Person的集合,它持有Person的对象列表,这个集合上有相应的方法用来处理其中每个元素。
这样,改变Dao.GetAllPersons()返回类型为People, Service就变成
改变之后,就可以对原先的集合操作在People这个Domain对象上进行,而不用在上一级的Service中。
总结两点
1. PrintAddressOf()方法本身并不属于Service的行为,而是属于People的,在所有的设计中,应该将某个对象的行为放在该对象中,这样可以做最简单的测试。
2. 在方法返回某个对象的List时,应考虑是否引入该对象的集合的类,这样可以在Domain层做最廉价的测试。