- 一、领域驱动设计DDD(Domain Driven Design)
- 名词定义
- 战略建模
- 战略和战术是站在DDD角度进行的划分:
- 战略设计:侧重于高层次、宏观上去划分和集成限界上下文
- 战术设计:更关注具体使用建模工具来细化上下文。
- 战略和战术是站在DDD角度进行的划分:
- 领域
- 现实世界中领域包含了问题域和解系统
- 解系统:可以映射为一个个限界上下文
- 限界上下文:软件对于问题域的一个特有的、有限的解决方案。
- 一个给定的业务领域会包含多个限界上下文,想与一个限界上下文沟通需要通过显示边界进行。
- 系统通过确定限界上下文进行解耦
- 解系统:可以映射为一个个限界上下文
- 现实世界中领域包含了问题域和解系统
- 划分限界上下文:
- 不应该按照技术架构或者开发任务来划分
- 应该按照语义边界来考虑,从需求出发,按领域划分
- 从两个方向划分:
- 纵向:识别事件流中的事件,倘若两个事件之间的关系较弱,或体现了非常明显的阶段,就可以对其进行分隔。
- 横向:梳理所有事件,根据组成事件的名词和动词去发现事件之间的相关性(相同、相似的名称)然后去提炼一个整体的概念
- 识别限界上下文遵循的原则
- 单一抽象:每个限界上下文从概念上应处于同一抽象层次,不能嵌套
- 正交原则:限界上下文直接不能互相影响,相互包含。
- 上下文映射图
- 作用: 进一步梳理上下文之间关系
- 映射关系:
- 合作关系Partnership:两个上下文紧密合作,一荣俱荣,一损俱损。
- 共享内核SharedKernel:两个上下文依赖部分共享的模型
- 客户方-供应方Customer-Supplier Development:上下文之间有组织的上下游依赖
- 遵奉者Conformist:下游下文只能盲目依赖上游上下文
- 防腐层Anticorruption Layer:上下文通过一些适配和转换和另一个上下文交互
- 开放主机服务Open Host Service:定义一种协议让其他上下文对本上下文进行访问
- 发布语言Published language:通常与OHS一起使用,用于定义开放主机的协议
- 大泥球Big Ball of Mud :混杂在一起的上下文关系,边界不清晰
- 另谋他路SeparateWay:两个没有任何完全联系的上下文。
- 上下文映射关系明确限制了限界上下文的耦合性,耦合度限定在数据耦合Data Coupling的层级
- 识别上下文映射:
- 通过事件风暴:
- 识别跨限界上下文之间相邻事件的关系
- 事件之间是否存在直接触发的关系(参与者为前置条件),需要确定这两个事件所属的限界上下文
- 判断这两个事件所属的限界上下文,谁时主要的,主要的BC就是下游
- 通过事件风暴:
- 战术建模——细化上下文
- 实体:当一个对象由其标识(而不是属性)区分时,这种对象称为实体
- 值对象:当一个对象用于事务描述而没有唯一标识时,被称作值对象Value Object
- 聚合根
- Aggregate聚合是一组相关对象的组合,作为一个整体被外界访问, 聚合根Aggregate是这个聚合的根节点
- 聚合可指导详细设计
- 由根实体,值对象和实体组成
- 如何创建好的聚合
- 边界内的内容具有一致性:在一个事务中只修改一个聚合实例。
- 设计小聚合:大部分聚合都可以只包含根实体,而无需包含其他实体,即使一定要包含,可以考虑将其创建为值对象。
- 通过唯一标识来引用其他聚合或实体:当存在对象间的关联时,建议引用其唯一标识或将需要的属性构造值对象,如果聚合创建复杂,使用工厂方法屏蔽内部复杂的创建逻辑。
- 领域服务:一些重要的领域行为或者操作,可以归类为领域服务,它既不是实体,也不是值对象的范畴
- 领域事件:是对领域内发生的活动进行的建模
- 战略建模
- 全过程
- 设计领域模型的一般步骤:
- 根据需求,划分初步的领域和界限上下文,以及上下文之间的关系。
- 进一步分析上下文内部,识别哪些是实体,哪些是值对象。
- 对实体、值对象进行关联和聚合,划分出聚合的范畴和聚合根。
- 为聚合根设计仓储,思考实体或者值对象的创建方式。
- 在工程中实践领域模型,在实践中检验模型合理性,倒退模型不足的地方并重构。
- 名词定义
- 二、全局分析阶段
- 价值需求分析——商业画布
- 业务需求分析——事件风暴
- 第一步,识别事件
- 事件:
- 是过去发生的与业务有关的事实
- 具有时间点的特征,所有事件连接起来会形成明显的时间轴
- 是管理者和运营者 重点关心的内容,若缺少该事件会对管理和运营产生影响
- 会导致目标对象状态的变化
- 注:事件命名统一如,n + v-ed
- 标记热点:
- 识别事件的过程中,如果出现以下情况可标记为热点:
- 暂不考虑的事件流分支
- 出现分歧和争执的事件
- 需要强调的事件或事件对应的领域逻辑
- 识别事件的过程中,如果出现以下情况可标记为热点:
- 识别出第一个事件后,按照事件的前因后果驱动以时间为轴列出所有事件
- 事件:
- 第二步,识别参与者
- 事件一共有四种参与者
- 角色(Role):触发事件的人
- 策略(Policy):触发事件的规则//策略包含规则,可认为策略是规则+定时器的组合
- 外部系统(External System)
- 事件(Event):即当前事件的前置事件
- 事件一共有四种参与者
- 第一步,识别事件
- 业需分析——领域和子领域
- 根据业务价值划分子领域
- 领域划分为
- 核心子领域
- 通用子领域
- 支撑子领域
- 划分策略:
- 按相关职能部门
- 产品方向
- 划分核心业务流程的环节
- 业务概念
- 领域划分为
- 根据业务价值划分子领域
- 价值需求分析——商业画布
1,191 次浏览