数据模型特征
真正的数据模型是可确定性测试(deterministically testable)的。也就是说,它们只由其他可确定性测试的数据类型组成。这意味着数据模型在运行时不能有任何外部依赖关系。
最后一点很重要。如果一个类在运行时与DAL耦合,那么它就不是数据模型。即使在编译时使用IRepository接口来“解耦”类,也无法消除与外部依赖的关系。
在判断什么是数据模型时,要小心那些“存活实体”。为了支持延迟加载,来自ORM的实体通常会包含一个对数据库上下文的引用。这就又让我们回到了非确定性行为的领域,实体行为的变化取决于上下文状态以及对象的创建方式。
换句话说,数据模型的所有方法都应该是可预测的,而且这种预测只能基于它们的属性值。
在父对象和子对象之间传递消息
父对象和子对象通常需要交互。如果做得不好,可能会导致难以理解的紧密交叉耦合。为了简化问题,请遵循以下三条规则:
- 父对象可以直接与子对象的属性和方法交互。
- 子对象只能通过触发事件与父对象进行交互。
- 对象不能直接与兄弟对象交互,兄弟对象之间的消息必须通过共同的父对象来传递。
基于这样的设计,可以将子对象分解出来,并在没有父对象的情况下对其进行测试。测试本身可以监控只有父对象能够处理的事件。










