DDD笔记1:简介及战略设计

2023-03-17  本文已影响0人  王侦

1.DDD的背景和来源

1.1 DDD的核心思想和解决的痛点问题

1.1.1 什么是模型和建模

模型是对领域的抽象和模拟。

建模是针对特定问题建立领域的合理模型。

1.1.2 软件系统的复杂性来自哪里

复杂性来源:

业务复杂性导致模型复杂


技术实现引入额外复杂性


可以引入搜索防腐层:


1.1.3 DDD的关键思想以及如何应对多变的复杂性

核心思想一、模型分解

核心思想二、模型驱动设计(Model Driven Design)

1.2 面向对象和敏捷与DDD的区别与联系

面向对象分析与设计没法应对大型复杂系统。

敏捷开发流程:


1.3 DDD的过去、现在与未来

应用

理论和工具

2.战略设计

2.1 案例背景介绍

面向自动售卖机的零售SaaS


团队背景

客户背景

2.2 建模和设计的整体流程

整体流程(重叠的,建模涡流):

挖掘用户故事

建立通用语言

战略设计

战略设计主要做三件事:

战术设计

常用的建模方法

2.3 如何描述模型?从用户故事到通用语言

2.3.1 用户故事

用户故事

什么是用户故事?

用户故事的构建一般来说有三个环节:

分别对应用户故事的三个元素,也就是3C:Card(卡片)、Conversation(谈话)、Confirmation(验证)。

Confirmation模板:

假设我是<角色>,在xxx情况下,
当我<操作>,
那么<结果>。

2.3.2 使用用户故事收集和梳理SmartRM的需求

  1. 售卖机扫码支付购物 售
  1. 柜门机免密购物

其他顶层用户故事还包括:

2.3.3 使用Domain Storytelling分析用户故事

Domain Storytelling是一种领域分析建模方法,通过这种方法,产品和研发人员可以利用语言学习的相同原理建立或者学习一个领域的通用语言,并且建立领域模型。

在storytelling过程中,一方(通常是架构师)聆听另一方(通常是产品经理或者领域专家)以主谓宾的句型(谁做了什么)讲述用户故事的流程,进行问答和讨论,并以图形的方式快速复述出来。

使用在线工具domain-story-modeler(https://github.com/WPS/domain-story-modeler),可以在线实践domain storytelling。

可以更进一步,将通用语言中的词汇提炼出来,将其中英文都列在通用语言词汇表中,这些词汇将会贯穿整个建模和设计过程,最终也会体现在代码中,因此团队中所有成员,都需要明确理解其含义,并且在相关讨论、模型、以及代码中使用它们。

通用语言

通用语言

2.4 分解问题:领域划分和子域

2.4.1 什么是领域划分和子领域

领域划分是以分离关注点为原则对问题空间的划分。基于领域划分进行分工协作而非基于需求。

子域是领域中某个方面的问题和解决它所涉及的一切。


2.4.2 为什么要进行领域划分

传统模式的问题(6个需求分配给6个员工开发)


领域划分可以解决传统模式的问题

2.4.3 基于用户故事分解的领域划分方法

最终完整的划分


2.5 确定系统最核心的部分:核心域和精炼

战略设计要明确核心域,团队尽量减少非核心域投入。

2.5.1 子域的类型

子域

2.5.2 核心域的意义

公司利益所在,相对稳定。

2.5.3 什么是精炼以及精炼的方法

精炼

精炼的方法

SmartRM核心域

2.6 分解模型:限界上下文

限界上下文是在解决方案空间对模型的分解单位。

2.6.1 什么是限界上下文

限界上下文是一种语义上的上下文边界。意思是在这个边界里的软件模型组件都有它特定的含义并且做特定的事。一个限界上下文内的组件都是上下文特定的并且语义明确的。

2.6.2 为什么需要限界上下文

原因:

理想情况,子域和限界上下文是一一对应的。

2.6.3 如何划分限界上下文

三种方法

Domain Storytelling中边界的特征

基于子域概念提取


2.6.4 限界上下文和微服务的关系

微服务是限界上下文的实现方式。

2.7 多个上下文之间如何协作?上下文映射和防腐层

2.7.1 什么是限界上下文?为什么需要?

Context Mapping。

上下文映射是指限界上下文之间的模型映射关系。

描述团队之间的协作关系以及上下文之间的集成关系。

决定上下文之间如何集成一级如何设置防腐层。

2.7.2 上下文映射有哪些模式?

九种模式

2.8 剥离领域模型与技术实现:建立分层架构

2.8.1 为什么要隔离领域模型

原则:严格按照领域模型来编写代码

但是建模和实现中都有破坏该原则的因素。比如为了性能,创建不存在的实体。

架构分层能够避免模型在实现过程中被省略或者污染。

贫血模型:

传统方式的问题

2.8.2 DDD传统四层架构和洋葱(六边形)架构

四层:

四层优点:

四层缺点:

解决方法

六边形架构优势

参考

上一篇下一篇

猜你喜欢

热点阅读