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

29|限界上下文(中):限界上下文怎样影响架构设计?

你好,我是钟敬。
上节课我们学习了“限界上下文”和“上下文映射”两个模式。
今天我们继续完成“工时管理”上下文,帮你进一步深化这两个概念。然后,我们会根据限界上下文来完成架构设计。由于这个迭代出现了多个上下文,所以架构设计的时候,我们首先要讨论的就是使用单体还是微服务。

为“工时项管理”上下文建模

沿用上节课的假设,你是开发组长,我是技术骨干,比你先学了一些 DDD,我们都是这个项目的第一批成员,共同承担着架构师的职责。
在为“工时管理”上下文建模之前,我们先回顾一下之前的模型。
你思考了一下,问:“工时管理和其他上下文的有一个区别,就是这里多了泛化。那么拆成上下文以后,是不是还要原样保持这个泛化呢?另外,考虑到请假信息也要报工时这个新需求,是不是说请假记录也要作为工时项的子类呢?”
我说:“让我先试着画一画,再讨论吧。”于是我为工时项管理上下文画出了后面的模型图。
看到这张图,你有些疑惑地问:“泛化跑哪儿去了?”接下来,让我们一步一步看一下。

“员工”的上下文映射

先看个简单的,和“项目管理”上下文一样,员工也是从“基础信息管理”上下文映射过来的。

“工时项”实体

下面看比较重要的工时项实体。
请注意,由于现在我们是专门考虑“工时管理”上下文,所以我们不必过多地受到“项目管理”和“假期管理”中概念的“拖累”,而是聚焦在什么样的模型对实现工时管理功能最有利就可以了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文主要讨论了限界上下文对架构设计的影响,并围绕“工时管理”上下文的建模展开。作者首先介绍了工时项实体和其上下文映射,强调了限界上下文内部概念一致性的重要性。接着,文章展示了限界上下文的概念映射图,用UML依赖表示各个上下文的映射关系。最后,文章探讨了限界上下文驱动的架构设计,提出了单体和微服务架构的综合考虑因素。总体而言,本文深入浅出地介绍了业务概念和架构设计问题,同时提供了UML组件图的示例和架构设计的综合考虑因素。文章内容丰富,适合技术人员阅读。

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

全部留言(8)

  • 最新
  • 精选
  • wy
    来个彩虹屁吧,我感觉关于工时项的相关需求设计得挺好的,很符合目前需求迭代的节奏,而且需要一定的设计能力; 这部分工时项的需求,看起来很简单(pm角度),但实际上如果没有良好的设计,我估计实现出来就是依托答辩,后续新增的需求只能是难上加难🤣

    作者回复: 这说明您确实有实际项目经验 🐮 共同提高!

    2023-02-20归属地:广东
    2
  • wy
    对于工时项map from项目有些疑惑,总感觉应该是反的,因为工时项应该算是抽象,为啥这里要感知具体的实现; 我理解应该是在项目管理上下文中有一个工时项实体(map from工时项管理上下文),然后项目实体还是会有一条泛化的线指向这个工时项实体

    作者回复: 这样就造成了项目管理对工时项的耦合。

    2023-02-19归属地:广东
    3
    1
  • 阿甘
    请教钟老师:拆分上下文过程中,项目、子项目到工时项的泛化关系为何要去除?保留这个泛化关系好像更容易说明其业务关系。(是为了最小化模型之间的依赖吗?)

    作者回复: 泛化会增加模型的复杂性,如果不是很必要,还是不用

    2023-05-27归属地:北京
  • BMX
    “这也意味着,在代码的目录结构中,在根目录下面,首先为这 3 个上下文建立 3 个包,每个包内部,再按分层架构来进一步分包。”这里有个疑问:组件(界限上下文)之间如果有调用关系,如"projectmng"需要调用"basicinfomng",那么调用的是API层,应用层还是领域或聚合层服务呢?

    作者回复: 下节课就讲到了

    2023-03-27归属地:上海
  • hacker time
    这是原文“在代码的目录结构中,在根目录下面,首先为这 3 个上下文建立 3 个包,每个包内部,再按分层架构来进一步分包”,不理解这句话,是不是在IDEA开发工具里面首先新建一个maven project,然后在src新建3个并列的上下文的包,然后在每个包里新建adapt er,application,domain的包,在adapter目录下新建drive和driving包?这样和迭代一的代码目录结构很不一样了

    作者回复: 是

    2023-03-06归属地:湖北
  • 赵晏龙
    1、我没有太明白,这个map from 到底是指在子模块中自我维护一个状态,还是从外部接口获取?如项目成员->工时项成员,【工时项成员】是否需要在【工时项系统】中做冗余?这决定了这道题的答案。按照我的理解,如果需要一条SQL查,隐式的说明这是一个数据库内,也就是一个子系统内。一个join应该就能查出来。

    作者回复: 就目前这个场景,【工时项成员】在【工时项系统】中做冗余比较好些。这是因为,【工时项成员】中的内容,可能不止来源于【项目成员】,还可能有非项目的工时项,也要安排成员。

    2023-03-01归属地:湖南
  • 铿然
    有点复杂,先把业务需求和场景说清楚再展开设计更容易理解,否则要么不理解,要么会觉得是过度设计。
    2023-06-20归属地:江苏
  • aoe
    工时管理依赖的上下文真多啊,有:基础信息管理、项目管理、假期管理
    2023-02-28归属地:浙江
收起评论
大纲
固定大纲
为“工时项管理”上下文建模
“员工”的上下文映射
“工时项”实体
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部