这几天阅读了InfoQ上下载的“领域驱动设计-精简版”。感觉还是有不少的收货的。在这里记录一下自己的一些理解。
1. 实体与值对象。
实体与值对象最大的区别在于“实体需要由标示符来唯一的定义”,而值对象无需持有标示符。实体的标示符可以是基于数据库层面的唯一索引,也可以采用若干个属性的组合来实现一个实体。对于值对象来说,由于它并没有唯一性的标识符。因此,值对象可以非常方便的传递和共享的。这就要求,作为值对象应该具有“不变性”。
2. 领域服务
领域服务通常具备了如下的三个特征:首先,领域服务并不隶属于某一个值对象或者实体。其次,领域服务中常常会涉及到其它的领域对象。最后,领域服务通常都是没有状态的。
3. 内聚、工厂、仓库
在梳理领域模型的过程中,模型之间的关联关系常常很复杂。因此,需要我们按照如下的步骤梳理模型之间的关联关系。
1. 去除非本质的关联关系。
2. 尝试在一对多的关联关系中加入约束条件,以减少依赖。
3. 尽量去除双向依赖。
内聚,在领域建模的过程中,通常是这样的一个建模过程:
1. 让实体持有各个值对象的引用。实体,将作为外部唯一可以访问的模型。
2. 每一个内聚,都有一个根。而这个根,就是实体对象。
3. 对于值对象,可以通过根,来控制外部对其的访问。
4. 通常情况下,只有聚合中的实体,可以通过数据库构造。其他的模型只能通过模型间的关联关系构造。
工厂,其主要的作用在于对外屏蔽复杂对象的创建过程。因此,外围系统不需要了解任何创建对象的知识。
仓库,其中主要封装了,从存储介质中获取对象的逻辑。
4. 关于重构
“使用基础构造元素,并采用统一的领域语言将为工作带来成效”。个人感觉,重构需要本着上述的原则,对代码进行持续的优化。同时在重构的过程中,结合领域专家的意见,完善领域模型。
5. 关于领域模型上下文
领域模型的上下文通常需要和领域模型一同构建。所谓的领域上下文通常是指“一组条件的集合”。将上下文进行一定的抽象,并将上下文与领域模型进行关联。
分享到:
相关推荐
使用领域模型构建UML类模型使用领域模型构建UML类模型使用领域模型构建UML类模型使用领域模型构建UML类模型使用领域模型构建UML类模型
贫血模型or领域模型的举例对比,让你初步了解贫血模型与领域模型的区别和概念
如何设计架构-分层和组织领域模型 层(layer)这个概念在计算机领域是非常了不得的一个概念。计算机本身就体现了一种层的概念:系统调用层、设备驱动层、操作系统层、CPU指令集。每个层都负责自己的职责。 要组织...
领域模型最近代码实现 领域模型最近代码实现 领域模型最近代码实现
贫血模型or领域模型的举例对比,让你初步了解贫血模型与领域模型的区别和概念。附加一个自己创建的代码范例
领域驱动设计入门以及实践,如何用领域驱动设计来做
领域模型代码示例
UML 领域模型介绍
lec-5 领域模型 DomainModel.ppt
DDD则不同:它像是更小粒度的迭代设计,它的最小单元是领域模型(Domain Model),所谓领域模型就是能够精确反映领域中某一知识元素的载体,这种知识的获取需要通过与领域专家(Domain Expert)进行频繁的沟通才能将专业...
UML——BBS领域模型 domain model
领域模型管理与AOP,主要讲解模型设计,胖领域等。具体参见文档。
运用领域工程的思想,提出了基于领域模型的系统需求获取方法。该方法可识别应用系统中的共同特征,并抽象这些特征形成领域模型。通过领域模型,引导用户给出完整的系统需求。
DDD领域模型设计方案
关于领域模型java代码示例。
通过业务领域模型驱动设计, 关于降低设计复杂性的好书。
基于UML的医院信息系统领域模型设计我在网上找到的资源希望对大家有所帮助
宿舍管理系统的各种文件、图等。 1、宿舍管理系统需求报告 2、宿舍管理系统需求分析报告 3、功能分解与数据字典...5、领域模型 6、目标模型与流程图 7、实体关系图 8、数据流图与上下文图 9、顺序图 10、用例图和状态图
特征模型作为捕获领域需求的重要模型已被现阶段的主流领域工程方法所接受,但这些方法缺乏对特征模型组织框架的细致研究和说明,在一定程度上导致了特征模型在表现形式上的冗余性和混乱性,也使得领域分析人员在实践中...
基于GO的六边形架构框架,可支撑充血的领域模型范式代码实现