创意响应式网站建设,高级seo培训,政务信息系统网站建设规范,文化馆网站建设解决方案首先#xff0c;需要根据需求建立一个初步的领域模型#xff0c;至少要识别出领域对象和领域对象之间的关系#xff08;可以是没有方向的关联关系#xff09;。这些领域对象只应该放在领域层中。如果存在应用职责#xff0c;可以识别出应用类。它们用来协调领域对象#… 首先需要根据需求建立一个初步的领域模型至少要识别出领域对象和领域对象之间的关系可以是没有方向的关联关系。这些领域对象只应该放在领域层中。如果存在应用职责可以识别出应用类。它们用来协调领域对象只负责提出问题本身并不解决问题。解决问题是领域层的职责。这些应用类将被放在应用层中。 接下来分析领域模型识别出实体对象和值对象。如果是实体对象最好判断其标识的组成与生成方式。然后再细致地分析关联关系确定关联关系的游历方向。要注意几种特殊的关联关系。如果是多对多则要看是否可以转换为有限定的一对多。对于循环引用关系则需要特别注意。可以考虑利用查询利用资源库来解除其中一方的引用关系。如果要继续维护这种循环引用需要考虑参与循环引用的多个对象之间的不变量。如果是双向关联很可能是组成聚合的两个对象但要判断哪个是聚合根。此时彼此的构造函数是双重委派的但其中非根对象的创建应该封装在根对象的构造函数或者工厂中。 之后是划分聚合的边界找到聚合根。放在聚合中的实体对象通常存在两个特点1)不需要对它进行全局访问2)它与聚合根有非常紧密的联系。如果无法确定聚合根且又不是某个聚合范围中的对象可以暂时当作聚合根对象来处理。 需要考虑资源库Repository对象了。通常我们只需要对聚合根考虑资源库。主要是从查询的角度来判断资源库这里存在查询方法的定义需要哪些查询关键字或者利用Criteria。接着考虑对象的创建。需要考虑几个方面。一个是对象的构造函数参数尤其是聚合根对象要考虑聚合中的对象保持不变量。同时还需要考虑标识的问题。第二要考虑是否需要工厂来封装对象的创建第三需要考虑是否需要复制对象即是否采用原型模式。如果需要复制则要考虑聚合中的对象哪些需要创建新的对象哪些需要复制。 接下来需要对模型进行进一步的细化。例如重点考虑循环引用。同时还要分析是否需要对象的抽象和多态以及是否需要考虑服务对象。 最后是对模块的划分。最好不要根据模式来分类将实体对象、值对象、资源库等对象分别放在一起而应该按照业务逻辑的内聚性对对象进行模块划分。 注意在识别领域模型时对于业务规则和约束来说需要利用规格Specification模式对这些进行封装。另外切忌将与业务和业务规则相关的职责放到应用层中。应用层应该是薄薄的一层。当然在整个DDD设计过程中还需要不断迭代、精化和重构。 转载于:https://blog.51cto.com/wayfarer/290790