首先,需要根据需求建立一个初步的领域模型,至少要识别出领域对象和领域对象之间的关系(可以是没有方向的关联关系)。这些领域对象只应该放在领域层中。如果存在应用职责,可以识别出应用类。它们用来协调领域对象,只负责提出问题,本身并不解决问题。解决问题是领域层的职责。这些应用类将被放在应用层中。
接下来分析领域模型,识别出实体对象和值对象。如果是实体对象,最好判断其标识的组成与生成方式。然后,再细致地分析关联关系,确定关联关系的游历方向。要注意几种特殊的关联关系。如果是多对多,则要看是否可以转换为有限定的一对多。对于循环引用关系,则需要特别注意。可以考虑利用查询(利用资源库)来解除其中一方的引用关系。如果要继续维护这种循环引用,需要考虑参与循环引用的多个对象之间的不变量。如果是双向关联,很可能是组成聚合的两个对象,但要判断哪个是聚合根。此时,彼此的构造函数是双重委派的,但其中非根对象的创建应该封装在根对象的构造函数(或者工厂)中。
...
More...