软件设计之美
郑晔
开源项目 Moco 作者
19890 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
软件设计之美
15
15
1.0x
00:00/00:00
登录|注册

28 | 战略设计:如何划分系统的模块?

你好!我是郑晔。
上一讲,我们已经初步认识了 DDD ,知道了支撑 DDD 最核心的就是通用语言和模型驱动设计的方法。我们在上一讲已经讲了建立通用语言的方法,接下来,就该进行模型的设计了。
在模型设计中,DDD 又分成了两个阶段,战略设计和战术设计。这一讲,我们先来聊聊战略设计,下一讲再来谈战术设计。
战略设计,这个名字听上去有点高大上。而且,战略设计包含很多的概念,比如,子域、限界上下文和上下文映射图等等。这让很多人有些望而却步。虽然概念看似很多,但只要有一条主线将它们贯穿起来,这些概念也不难理解。
我们可以先把这些概念做一个划分,分为做业务的划分和落地成解决方案两个部分,也就是说,战略设计中的概念,一部分是为了将不同的业务区分开来,也就是要将识别出来的业务概念做一个划分,另一部分则是将划分出来的业务落实到真实的解决方案中。
好,我们接下来就先来看看战略设计中的这些概念到底是怎么回事。

业务概念的划分

我们前面说过,软件开发就是在解决问题,所以,一方面,我们要知道要解决的问题是什么;另一方面,我们要知道怎么去解决问题。
我们要解决的问题就是领域问题,在 DDD 中,有几个概念是与领域相关的,比如,子域、核心域、支撑域、通用域等。其实,它们说的都是一件事,就是如何先把问题从大面上进行分解。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

领域驱动设计(DDD)中的战略设计阶段是解决软件开发问题的关键。文章重点讨论了业务概念的划分,强调了将问题分解成小领域的重要性。划分子域时,关键在于找出不同的关注点,并遵循单一职责原则将不同的概念区分开来。核心域、支撑域和通用域的概念被介绍,并讨论了如何根据它们的重要性来决定投资策略。限界上下文形成了一个边界,限定了通用语言自由使用的范围。上下文映射图定义了不同上下文之间的交互方式,其中防腐层是最具防御性的一种关系。通过战略设计,读者可以了解在DDD中如何将大领域分解成小领域,并根据其重要性进行投资决策。这一阶段的关键思想是将不同的模型进行分组,为后续的实现奠定基础。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件设计之美》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • 捞鱼的搬砖奇
    一套微服务里 有一个服务专门负责操作数据库同时又带有业务。其他系统需要发送 RPC 请求调用该系统完成数据库操作。请问老实这样合理吗

    作者回复: 听上去不太合理,各个服务都应该是一个完整独立的。这种把所有的入库都放在一起的操作,为啥还要做微服务呢?

    2020-07-31
    3
    13
  • 0xABC
    通用语言、战略设计、战术设计,好似一个三部曲,从上层到下层,层层细化和分解。感觉通用语言和战略设计对于接触和使用不久的新人是要不断踩坑的,希望郑老师能分析一些过去很多年的一些详细的实际案例,理论结合实际,更能体会其中的奥妙。

    作者回复: 讲设计,困难的一点就在于背景太多,要想理解一个设计,通常要先理解背景。讲太细了,就会牵扯到很多具体的业务,怕透露太多。 选择什么粒度的内容其实我也一直比较纠结。

    2020-08-03
    5
  • Geeker
    有一点不太明白,在不同边界上下文交互过程中,防腐层是封装了具体的远程调用协议和将外部数据进行格式装换?

    作者回复: 交互方式和数据协议,都可以通过防腐层处理掉。

    2020-07-31
    3
    5
  • 桃子-夏勇杰
    想听郑老师讲讲更简便一些的模型设计方法,例如,四色建模法,我不知道是不是?主要是想听听郑老师的实战经验:)

    作者回复: 四色建模并不是简便,从完整性的角度,它不如DDD。想了解四色建模,你可以去看看我推荐的那本书和那篇文章。

    2020-08-01
    4
  • abc-web
    老师你好,听了关于领域驱动开发这几节课,感觉是先进行事件风暴,在进行领域划分,然后对事件风暴的输出进行归类,是这样吗老师?

    作者回复: 可以大致这么理解

    2021-08-15
    1
  • fengkuok
    郑老师,每节课最后的思维导图是用什么软件画出来的?

    编辑回复: 是用的Xmind,推荐~

    2020-08-10
    1
  • 阳仔
    总结一下 战略设计首先要把业务概念做一个划分, 这又分为业务划分和解决方案落地 业务划分将领域问题拆分为多个子领域问题,根据重要程度不一样又分为核心域、支撑域、通用域。 解决方案落地则需要做到把拆分的各个子领域问题对应到解决方案中,限定上下文就这样的一个桥梁,而上下文映射则定义了限定上下文之间的交互方式。 最重要的交互方式就是建立防腐层,它的作用是把外部模型和内部模型之间的交互进行转化(这个感觉有点类似适配器模式的意思)
    2020-07-31
    3
  • 小学一年级
    郑老师,上下文映射图的几种交互方式能给我们讲讲吗?
    2020-07-31
    2
  • 磉盘
    通过建立通用语言识别模型,通过战略设计从更高层次对模型分组,模型放到不同的限界上下文中形成了子域,对不同的子域做不同的投入。子域映射到设计上为不同的上下文,每个上下文可以形成一个子系统(微服务)。 上下文通过暴露接口的方式进行交互,就是上下文映射图。在通过战术设计从技术上予以实现。
    2021-05-25
    1
  • Bug? Feature!
    战略设计,就是将不同的模型进行分组!划分业务,划分子域,针对各自的特点,进行不同的投入。
    2020-11-09
    1
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部