领域驱动模型设计-实战

欧创新《DDD实战课》一颗阅读整理 本文是阅读《DDD实战课》一刻的读后整理原文(原文可到极客时间自行购买) 一基础篇: DDD 的核心知识体系: 正在上传…重新上传取消 2.DDD的设计思路: 1.战略设计主要从业务视角出发,建立业务领域模型,划分领域边界,建立通用语言的限界上下文,限界上下文可以作为微服务设计的参考边界。 2.战术设计则从技术视角出发,侧重于领域模型的技术实现,完成软件开发和落... 阅读详情

文章内容摘自:欧创新老师的DDD实战课

12 | 领域建模:如何用事件风暴构建领域模型?

重要知识点整理

什么是事件风暴

  • 它就是我在前面多次提到的事件风暴。事件风暴是一项团队活动,领域专家与项目团队通过头脑风暴的形式,罗列出领域中所有的领域事件,整合之后形成最终的领域事件集合,然后对每一个事件,标注出导致该事件的命令,再为每一个事件标注出命令发起方的角色。命令可以是用户发起,也可以是第三方系统调用或者定时器触发等,最后对事件进行分类,整理出实体、聚合、聚合根以及限界上下文。而事件风暴正是 DDD 战略设计中经常使用的一种方法,它可以快速分析和分解复杂的业务领域,完成领域建模。

 

事件风暴需要准备些什么

  • 事件风暴的参与者:领域专家就是对业务或问题域有深刻见解的主题专家,他们非常了解业务和系统是怎么做的,同时也深刻理解为什么要这样设计。如果你的公司里并没有这个角色,那也没关系,你可以从业务人员、需求分析人员、产品经理或者在这个领域有多年经验的开发人员里,按照这个标准去选择合适的人选。

 

  • 事件风暴要准备的材料:事件风暴参与者会将自己的想法和意见写在即时贴上,并将贴纸贴在墙上的合适位置,我们戏称这个过程是“刷墙”。所以即时贴和水笔是必备材料,另外,你还可以准备一些胶带或者磁扣,以便贴纸随时能更换位置。值得提醒一下的是,在这个过程中,我们要用不同颜色的贴纸区分领域行为。如下图,我们可以用蓝色表示命令,用绿色表示实体,橙色表示领域事件,黄色表示补充信息等。补充信息主要用来说明注意事项,比如外部依赖等。

 

  • 事件风暴的场地:是不是需要跟组织会议一样,准备会议室、投影,还有椅子?这些都不需要!你只需要一堵足够长的墙和足够大的空间就可以了。墙是用来贴纸的,大空间可以让人四处走动,方便合作。撤掉会议桌和椅子的事件风暴,你会发现参与者们的效率更高。

 

  • 事件风暴分析的关注点:在领域建模的过程中,我们需要重点关注这类业务的语言和行为。比如某些业务动作或行为(事件)是否会触发下一个业务动作,这个动作(事件)的输入和输出是什么?是谁(实体)发出的什么动作(命令),触发了这个动作(事件)…我们可以从这些暗藏的词汇中,分析出领域模型中的事件、命令和实体等领域对象。

 

如何用事件风暴构建领域模型?

产品愿景:产品愿景的主要目的是对产品顶层价值的设计,使产品目标用户、核心价值、差异化竞争点等信息达成一致,避免产品偏离方向。产品愿景的参与角色:领域专家、业务需求方、产品经理、项目经理和开发经理。在建模之前,项目团队要思考这样两点:用户中台到底能够做什么?它的业务范围、目标用户、核心价值和愿景,与其它同类产品的差异和优势在哪里?这个过程也是明确用户中台建设方向和统一团队思想的过程。参与者要对每一个点(下图最左侧列的内容)发表意见,用水笔写在贴纸上,贴在黄色贴纸的位置。这个过程会让参与者充分发表意见,最后会将发散的意见统一为通用语言,建立如下图的产品愿景墙。如果你的团队的产品愿景和目标已经很清晰了,那这个步骤你可以忽略。

 

  • 业务场景:分析场景分析是从用户视角出发的,根据业务流程或用户旅程,采用用例和场景分析,探索领域中的典型场景,找出领域事件、实体和命令等领域对象,支撑领域建模。事件风暴参与者要尽可能地遍历所有业务细节,充分发表意见,不要遗漏业务要点。场景分析的参与角色:领域专家、产品经理、需求分析人员、架构师、项目经理、开发经理和测试经理。用户中台有这样三个典型的业务场景:第一个是系统和岗位设置,设置系统中岗位的菜单权限;第二个是用户权限配置,为用户建立账户和密码,设置用户岗位;第三个是用户登录系统和权限校验,生成用户登录和操作日志。我们可以按照业务流程,一步一步搜寻用户业务流程中的关键领域事件,比如岗位已创建,用户已创建等事件。再找出什么行为会引起这些领域事件,这些行为可能是一个或若干个命令组合在一起产生的,比如创建用户时,第一个命令是从公司 HR 系统中获取用户信息,第二个命令是根据 HR 的员工信息在用户中台创建用户,创建完用户后就会产生用户已创建的领域事件。当然这个领域事件可能会触发下一步的操作,比如发布到邮件系统通知用户已创建,但也可能到此就结束了,你需要根据具体情况来分析是否还有下一步的操作。场景分析时会产生很多的命令和领域事件。我用蓝色来表示命令,用橙色表示领域事件,用黄色表示补充信息,比如用户信息数据来源于 HR 系统的说明。

 

  • 领域建模:领域建模时,我们会根据场景分析过程中产生的领域对象,比如命令、事件等之间关系,找出产生命令的实体,分析实体之间的依赖关系组成聚合,为聚合划定限界上下文,建立领域模型以及模型之间的依赖。领域模型利用限界上下文向上可以指导微服务设计,通过聚合向下可以指导聚合根、实体和值对象的设计。
  • 微服务拆分与设计:我们在基础篇讲过,原则上一个领域模型就可以设计为一个微服务,但由于领域建模时只考虑了业务因素,没有考虑微服务落地时的技术、团队以及运行环境等非业务因素,因此在微服务拆分与设计时,我们不能简单地将领域模型作为拆分微服务的唯一标准,它只能作为微服务拆分的一个重要依据。微服务的设计还需要考虑服务的粒度、分层、边界划分、依赖关系和集成关系。除了考虑业务职责单一外,我们还需要考虑将敏态与稳态业务的分离、非功能性需求(如弹性伸缩要求、安全性等要求)、团队组织和沟通效率、软件包大小以及技术异构等非业务因素。

13 | 代码模型(上):如何使用DDD设计微服务代码模型?

重要知识点整理

  • 代码模型总目录结构

 

  • 代码模型层次结构

 

 

16 | 视图:如何实现服务和数据在微服务各层的协作?

重要知识点整理

  • 微服务内跨层服务调用: 第一种是应用服务调用并组装领域服务。此时领域服务会组装实体和实体方法,实现核心领域逻辑。领域服务通过仓储服务获取持久化数据对象,完成实体数据初始化。

第二种是应用服务直接调用仓储服务。这种方式主要针对像缓存、文件等类型的基础层数据访问。这类数据主要是查询操作,没有太多的领域逻辑,不经过领域层,不涉及数据库持久化对象。

  • 微服务之间的服务调用:微服务之间的应用服务可以直接访问,也可以通过 API 网关访问。由于跨微服务操作,在进行数据新增和修改操作时,你需关注分布式事务,保证数据的一致性。
  • 领域事件驱动:领域事件驱动包括微服务内和微服务之间的事件。微服务内通过事件总线(EventBus)完成聚合之间的异步处理。微服务之间通过消息中间件完成。异步化的领域事件驱动机制是一种间接的服务访问方式。
  • 服务的封装与组合:

 

 

 

 

  • 数据对象视图:

数据持久化对象 PO(Persistent Object),与数据库结构一一映射,是数据持久化过程中的数据载体。

领域对象 DO(Domain Object),微服务运行时的实体,是核心业务的载体。

数据传输对象 DTO(Data Transfer Object),用于前端与应用层或者微服务之间的数据组装和传输,是应用之间数据传输的载体。

视图对象 VO(View Object),用于封装展示层指定页面或组件的数据。

 

DDD建模方法论之【事件风暴法】 DDD建模方法论之【事件风暴法】 前言 在领域驱动设计之初的需求分析阶段,对需求分析的基本思路就是统一语言建模,它是我们的指导思想。落实到具体操作层面,可以采用的具体方法是事件风暴法。 统一语言建模 -> 指导思想。 事件风暴会议 -> 实践方法。 事件风暴 事件风暴(Event Storming): 一种基于工作坊的DDD实践方法,可以快速发现业务领域中正在发生的事件,指导领域建模及程序开发。 事件:即事实,即在业务领域中那些已经发生的事件就是事实。风暴:运用头脑风暴会议进行领. 阅读详情

相关推荐

进击的码农(一)——领域驱动设计(DDD)落地实战

前言 接触DDD也有一段时间了, 参考了很多前辈的分享,他们的知识和经验对自己的帮助很大。本文以一个订单服务为示例来落地,同时假设你对DDD的相关概念都已经有所了解。 代码结构 主流的都会采用分层架构的方式,如下: 同样,还有用依赖倒置(DI)的, 都差不多。我们同样采用分层架构,分层结构如下: interfaces用户接口层:用户请求的入口,通常就是些controller。 applicat...

仰望星空 脚踏实地 5269

DDD - 事件风暴从理论到落地

事件风暴是由 Alberto Brandolini 发明的一种轻量级,基于 DDD 概念的系统分析方法,事件风暴(EventStorming)是一种以研讨会(workshop,也有翻译为“工作坊”的)的形式开展的,用于,特别是具有复杂流程的业务领域的系统分析方法。它有不同的风格,可以在不同的场景中使用:评估现有业务线的健康状况并发现最有效的改进领域;探索新的业务模式的可行性;设想新的服务,最大限度地为所有相关方带来积极成果;

迪曼奥特迦-博客 6815

Adams与Matlab联合仿真入门:从零搭建你的第一个动力学模型

本文为Adams与Matlab联合仿真新手提供了一份详尽的入门指南。文章从软件环境配置、版本兼容性检查讲起,逐步演示了如何在Adams中构建单摆动力学模型并定义输入输出接口,以及在Matlab/Simulink中搭建控制回路。通过一个完整的受控单摆实例,手把手教你完成从模型导出、模块生成到执行联合仿真的全流程,帮助你快速搭建并运行第一个联合仿真模型,实现动力学与控制系统的协同验证。

g5h6i7j的博客 699

DDD领域驱动设计-事件风暴

事件风暴通过工作坊的形式,由PM、RD、业务各方共同参与的, 发现并对齐领域知识。比较传统的做法是找一面大的白版,使用各种颜色的便签纸填写相关内容,往白板上粘贴。现在也有一些更便捷的支持协作的在线工具可供使用:BeeArt。

haoxin963的专栏 2733

Nordic开发者必备:SEGGER Embedded Studio免费许可证申请与配置全攻略

本文为Nordic芯片开发者提供了SEGGER Embedded Studio(SES)集成开发环境的详细配置指南。内容涵盖免费许可证的合规申请流程、项目创建、Nordic SDK集成,以及编辑器优化、构建调试配置、RTT日志输出等核心功能的高效设置,旨在帮助开发者构建深度优化的专业开发环境,显著提升嵌入式开发效率。

cheese的博客 353

nCode:GlyphWorks案例教程一

nCode GlyphWorks案例一Comparing Frequency Content of Two Different Tests案例文件目标配置选择数据 Comparing Frequency Content of Two Different Tests 在本案例中,我们将比较来自两个不同测试的六个加速计通道的频率内容。将三轴加速度计放置在车辆的左前角和右前角,然后分别在两个不同的试验路面上行驶12分钟以上。 案例文件 此案例的文件(采用nCode DAC格式)位于nCode安装目录下的\demo

追月行的博客 1万+

领域驱动设计实战:聚合根设计与领域模型实现

我清楚的知道一点,其实大家如果上网找文章,90%以上的人肯定是想知道具体编程的时候怎么落地,尤其是聚合根。现在互联网的文章要么是水军写的,要么是宣传广告来的,他们的问题如下一来要么是冲你钱包来的,实际参考价值不足0;二来全部清一色电商平台,就好像全世界都是淘宝亚马逊。所以这篇文章诞生了,我承诺没有电商,没有订单、库存、优惠这个例子。没有废话,不吹DDD,不黑MVC。能落地,能有一个可用套路。这只是一种实现思路,不是唯一实现思路。

weixin_32743045的博客 84

Auto.js实战:从解锁手机到自动阅读的全流程避坑指南(MIUI系统适配版)

本文详细介绍了Auto.js在MIUI系统下的自动化操作全流程优化指南,包括设备唤醒、应用启动、界面交互等关键环节的实战技巧。特别针对MIUI系统的变速检测机制和电源管理策略,提供了有效的避坑方案和性能优化建议,帮助开发者实现从解锁手机到自动阅读的稳定运行。

醉三国 246

DDD - 从贫血模型到充血模型:领域驱动设计(DDD)完整实战

本文介绍了领域驱动设计(DDD)的核心思想及其与传统贫血模型的对比。通过用户注册案例,展示了贫血模型的问题:业务逻辑分散在Service/Util层,导致代码难以维护和测试。DDD提倡将业务逻辑封装到领域对象内部,通过充血模型确保对象始终合法。文章对比了两种设计方式的差异,并介绍了DDD的核心概念(实体、值对象、聚合根等),为后续实战案例奠定理论基础。学习DDD可以解决代码可维护性差、业务规则分散等问题,让软件设计更加清晰合理。

小工匠 1362

瑞萨RH850/U2A8以太网模块mcal说明

如下所有功能的支持需要在达芬奇中开启EthGlobalTimeSupport。秒[32bit], 纳秒[32bit], 纳秒小数[20bit]每一帧发送数据的相关结构缓冲区都放在变量。每一帧接收数据的相关结构缓冲区都放在变量。

至道无难,唯嫌拣择。 1862

Python3实现基于ARIMA模型来预测茅台股票价格趋势

ARIMA(Autoregressive Integrated Moving Average)模型是一种广泛使用的时间序列分析方法,它可以用于对未来的数据进行预测。ARIMA模型由自回归模型(AR模型)、差分整合模型(I模型)和移动平均模型(MA模型)组成,因此也被称为ARIMA(p,d,q)模型。其中,p表示自回归阶数,d表示差分阶数,q表示移动平均阶数。具体来说,ARIMA模型可以通过以下步骤进行建模:数据预处理:对时间序列进行平稳性检验,如果不满足平稳性,则进行差分操作。

m0_64336780的博客 2万+
上一篇: 领域驱动模型设计-进阶
下一篇: elastisearch专题-如何优化es的写入性能
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值