手把手教你落地 DDD
钟敬
Thoughtworks 首席咨询师、数字化转型与运营团队 DDD 负责人
19697 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
AIGC特别策划 (2讲)
结束语&结课测试 (2讲)
手把手教你落地 DDD
15
15
1.0x
00:00/00:00
登录|注册

28|限界上下文(上):怎样为更大的需求建模?

你好,我是钟敬。
上节课我们概述了迭代三的主要内容和需求。这节课开始,我们将会学习 DDD 里的一个有代表性的模式“限界上下文”。
我相信你第一次听到这个名词的时候,肯定会觉得不知所云。这个词确实难以望文生义。不过别担心,我们可以暂且忘掉这个词本身,先回到我们的项目,我会一步一步地带你理解这个模式的概念和用法。

团队遇到的挑战

经过 1 年的苦心经营,“卷卷通”已经初步打开了局面。随着需求的增加,开发团队由原来的 4 个人发展到 20 个人。
假设你是开发团队的组长,我是技术骨干,我们都是这个项目的第一批成员,共同承担着架构师的职责。我比你先学了一点 DDD。
这时候,作为这个产品的元老,我们发现了一些新的问题。
第一,沟通变困难了。之前人少的时候,什么事只要跑到那个同事旁边说一声,就解决了。现在需要不断开会。有时以为沟通已经到位了,等代码做出来,才发现还是没理解。
第二,系统的代码质量变差了。尽管我们已经用了 DDD 的分层架构,但还是难以避免代码的腐化。尤其是老员工离职,新人接手,特别容易出问题。
第三,系统的外在质量问题也跟着变多了。尤其是新需求稍微复杂一点,就很容易牵一发而动全身。改了一个地方,就要改很多其他地方,如果漏了,就会出错。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

领域驱动设计(DDD)中的限界上下文概念及其应用是本文的重点。文章首先介绍了团队面临的挑战,引出了对系统拆分的需求。限界上下文不仅是一种分而治之的手段,更重要的是维护概念一致性。在大型系统中,全局概念一致性是不可能的,因此需要将大系统分解成若干子系统,每个子系统对应一个领域模型,以实现局部的一致性。文章还详细解释了限界上下文的含义和其与传统方法的不同之处。通过划分限界上下文,可以解决大型系统中的概念一致性问题。另外,文章还介绍了上下文映射的概念,强调了不同上下文中的概念存在映射关系。通过本文,读者可以了解限界上下文的概念及其在软件系统设计中的重要性,以及如何通过限界上下文来解决大型系统中的概念一致性问题。文章内容深入浅出,通过实际案例和对话展示了限界上下文的应用,为读者提供了宝贵的实践经验。 总结:本文深入探讨了领域驱动设计中的限界上下文概念及其应用。通过分解大型系统、维护概念一致性以及上下文映射,读者可以了解如何应用限界上下文来解决大型系统中的概念一致性问题。文章通过实际案例和对话展示了限界上下文的应用,为读者提供了宝贵的实践经验。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手教你落地 DDD》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • 衷培坤
    有个疑惑:我理解本文案例中项目管理和基础信息管理中的【员工】概念应该是一致的,否则就没必要用map from了吧?

    作者回复: 看怎么理解“一致”这个概念。 如果“一致”指的是同一个事物,那么是的,两个上下文中的员工是“一致”的; 如果“一致”指的不仅是同一个事物,而且所有关注点都相同,也就是字段都一样,关系都一样,那么两个上下文的员工是“不一致”的。至少它们需要的字段数量不一样。 DDD里说的“一致”,主要指的是后者。

    2023-04-02归属地:北京
    6
  • 2)第九课讲过,应该放在适配层,建立一个wrapper做防腐和模型转换,将DTO转为模型内部的DO。原文如下——在六边形架构里,把由外向内的适配器叫做 driven adapter,我把它译作被动适配器;而由内向外的适配器叫做 driving adapter,可以译作主动适配器。准确地说,主动适配器的作用不限于访问数据库,而是访问所有外部资源。这里请求是外部进来的,应该放被动适配器包下

    作者回复: 是这么个意思

    2023-02-16归属地:浙江
    4
  • 子衿
    有一点没有特别弄清楚,是不是说,同一个服务下,也可以拆成多个界限上下文,而不一定非要每个界限上下文一个服务 如果是这样的话,我理解,如果界限上下文,在同一个服务中,那么转换逻辑应该放在应用服务,如果不在同一个服务中,转换逻辑应该放在适配器层,当成一个外部访问

    作者回复: 是的,一个服务里可以有多个限界上下文。对于这种情况,严格地说,转换逻辑也应该放在适配器,不过也可简化一点,放在应用服务。你可以权衡一下这两者各自的利弊。

    2023-02-16归属地:浙江
    3
  • 黑夜看星星
    请问老师通用域,核心域,支撑域与BC属于多对多关系?

    作者回复: 是的

    2023-08-30归属地:广东
    1
  • aoe
    原来当系统规模过大,超过人类认知能力的时候,混乱就自然到来

    作者回复: 是的,很多软件设计的问题,看起来是技术问题,其实是人的问题

    2023-02-28归属地:浙江
    1
  • py
    1. 沟通问题,说了半天对不上号。代码问题 同一类实体命名不一样,代码质量差 2. application层

    作者回复: application 层是一种可行的思路,后面课程还介绍了一种通过适配器层的思路。

    2023-03-09归属地:上海
  • 赵晏龙
    1、竞争性考试的一个考生,在报名的时候、考试的时候、录用的时候都是不同的限界上下文。 2、这个转换我觉得我会在ApplicationService之间调用时以某种形式去做。

    作者回复: 第2题,其实有多种方式,后面讲到的一种方法是利用适配器和防腐层。

    2023-02-28归属地:湖南
  • 邓西
    2. 适配层

    作者回复: 不错

    2023-02-27归属地:四川
  • 6点无痛早起学习的和尚
    问题 2: 限定上下文之后,上下文映射是在上下文互相之间访问,应该放在适配器层。属于被动适配器层吧

    作者回复: 是的,适配器层比较好

    2023-02-27归属地:北京
  • tt
    我是这么想的,界限上下文既然是一个“边界”,跨边界必然要经过接口,所以转换就在接口上,不论接口是不是跨系统

    作者回复: 那么,接口属于DDD分层架构的那一层呢?

    2023-02-16归属地:北京
    2
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部