DDD的基本概念介绍
Posted muzizongheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DDD的基本概念介绍相关的知识,希望对你有一定的参考价值。
DDD的基本概念澄清
目录
什么是DDD
•Domain Driven Design
•领域是软件要解决的问题区域
•通过对领域知识建立模型,形成团队内各成员的通用语言,指导设计和实现,从而达到为客户解决问题的目的
•当领域模型发生改变时,开发人员需要重构,以便反映模型的变化,这样新知识就合并到软件中
Ubiquitous language (通用语言)
•将领域模型作为语言的支柱
•领域模型包括类和主要操作的名称
•领域模型尽量以文本为主,穿插简化图为说明
•不管是画图、写文档、写代码还是讲话,都用的同一种术语
•语言是演进的
Layered architecture(分层架构)
* 用分层来隔离领域
* 层中的任何元素都仅依赖于本层其他元素,或其下层元素。
* 高内聚,低耦合
* 领域层应重点放在如何表达领域模型上,而不需要考虑自己的显示和存储问题
•用户界面层
•向用户显示信息,解释用户命令
•应用层
•尽量简单,不包含业务规则或知识
•只为下层的领域对象分配任务,使他们协作
•领域层
•负责表达业务概念,业务状态信息和业务规则
•基础设施层
•上面各层提供通用的技术。比如持久化
Entity(实体)
•由标识定义的对象,而不是属性
•整个生命周期都有联系性
•模型必须定义出“符合什么条件才算是相同的事物”
Value Ojbect(值对象)
•描述领域的某个方面,但本身没有概念标识的对象
•关心它们是什么,而不关心它们是谁
•值对象是不可变的,具体实现分为共享和复制
Service(服务)
•领域操作(活动或者对象)
•定义能够为客户做什么,是动词而不是名词
•操作是无状态的
•结果和参数应该是领域对象
•是否包含业务规则来确定是应用还是领域Service
Module(模块)
•可以查看细节,而不会被整个模型淹没
•可以观察Module相互之间的关系,而不考虑细节
•将相同职责的对象放在一起
Aggregate(聚合)
•作为数据修改的单元,一组相关对象的集合
•包括一个根(root)和一个边界(boundary)
•根是Aggregate内一个特定的Entity
•Boundary定义了Aggregate内有哪些
•外部引用时,只可引用根;而边界内部的对象之间可以相互引用
Factory(工厂)
•对象本身承担大量的职责,让复杂对象创建自身,会职责过载导致问题
•将职责交给客户对象创建,会导致客户必须了解对象内部规则,导致和领域类产生耦合
•Factory隐藏创建细节,通常和Aggregate有关
•当创建新对象未满足固定规则时,Factory应拒绝创建对象
Repository(仓库)
•同一类型的对象的集合
•具有复杂的查询、添加和删除对象功能
•只为那些确实需要直接访问的Aggreagte提供Repository,而不是所有对象都提供
Specfication(规格)
•计算结果是真或者假的函数,一般用动词或形容词
•用于验证对象是否满足特定的业务规则
•用于Repository查询对象是否满足要求
•用于创建对象时是否满足需求
Bounded context(界限上下文)
•大型项目都会存在多个模型
•权利上的划分和管理级别的不同也可能要求模型分开
•标记不同模型之间的边界和关系
•边界内部严格保持模型的一致性
•防止重复的概念和假同源
实现步骤:
•根据需求建立一个初步的领域模型,识别出一些明显的领域概念以及它们的关联
•分析程序功能,识别出应用层和领域层的职责
•识别Entity,Value Object,Service等
•找出Aggregate Root
•为Aggregate写Repository
•走查场景,分析领域模型是否解决业务需求
•考虑创建Entity,Value Object,Aggregate等是用Factory还是构造,又或者是IOC
•重构模型
以上是关于DDD的基本概念介绍的主要内容,如果未能解决你的问题,请参考以下文章