职责驱动设计(业务领域建模)
(读书笔记:Expert C# 2008 Business Objects)
基于对象的责任进行分析
CRC表
潜在对象(C)----------职责(R)---------协作方(C)
-----------------------------------------
==== ====== =======
------------------------------------------
通过这个表,可以看出来,对象的责任是否清晰。如果职责描述不清,或者内容冗长,那么可以肯定是有问题的。
对象需要处理一个以上的职责,这意味着是有缺陷的。
画对象关系表,反复的修订,逐渐细化
(图)
检查:
1)是否是有可能重复的对象
2)是否是一个值对象(无标识符,无操作方法)
3)是否有循环嵌套,引用(很危险)
4)与其他对象无关(还有尚未发现的关系)
5)如果是一个列表,加载全部内容。(对用户来说,他的一个选择操作,可能会造成高昂的系统开销。这样的设计是不负责任的。)
6)某个对象是否是推断出来的(在业务领域没有,是开发人员创造出来的)。
设计时的性能优化
- 对象的属性,要考虑是否是只读的。如果没有特别的要求,不要给调用方犯错的机会,同时能减小系统的开销。
- 考虑对象是否会经常发生变动——考虑是否将它缓存起来(不一定是放在内存里)。当然,对象在多用户操作时,需要系统通知用原来的值是否被人修改过了。(这好像是另外一个问题……)
设计时在对象模型提供导航支持
这不是必需的。但是这是很有好处的。比如我们有个ProjectInfo对象,那么在UI层,有可能用户会由此导航到Project对象,典型的方法是调用ProjectInfo. GetProject()。
最终的设计反映在CRC表,对象关系图。我们拿用例来复核(测试),看看是否能满足用例。