领域建模方法论

  • 企业架构法
    • CBM 组件化业务模型
  • 面向服务架构设计
    • SOA面向服务架构模型
  • 用例分析法
  • 四色建模法
  • Event Storming事件风暴

企业架构法

CBM 组件化业务模型


图中纵着的一个个其实就是子域和界限上下文,横着的可能是一些策略层、控制层和执行层,里面又有一项一项的内容,这些内容在我们领域设计里面可以对应到一个个聚合,那就有了很多聚合也有了很多子系统。
如果说聚合太细了,我们不可能写的那么细,那你也许就是一个个的微服务、一个个模块。

面向服务架构设计

SOA面向服务架构模型


SOA是一切以总线为基准,总线里要完成异步的消息队列、要完成同步的API调用、要完成服务的注册等等。
上面还可以插拔,像流程化的应用服务、第三方的接口、交互式的内容、信息管理、安全模块、建模功能等等,所有的功能都插拔在总线之上。这种情况就是一个以总线为基石,然后插拔各种各样的内容,相对来说我们可以很自由的进行业务的拆分,然后接到这个组件上就能互相沟通、互相通讯了。基于同样的一套标准,同样的一套沟通协议,来开发我们整个的IT架构。

这两种不管是CBM,还是SOA都是五年之前的了,有点淘汰了。
那么有没有稍微新一点的呢?稍微新的有以下三种。

用例分析法


简单来看其实就是用UML语言把客户的具体需求全部拆解下来,可以用架构师思维的立方体模型来画,也可以像上图中,上面是组件模型,左下角是一些标准的用例分析,右下角是四加一模型等等。
UML语言有很多很多不同的变种,很多种设计模型。

但上述三种模型基本上都和领域有关,但它不是专有的领域模型,后面有两种模型,它们只为领域而生,也是比较潮流的模型,一起看下。

四色建模法

还记得小时候玩过的一个游戏,一个同学一个纸条,然后分工,有的同学写谁,有的同学写在哪里,有的同学写什么时间,有的同学写做什么事,然后把它们组合起来就能讲一个小故事了。
四色建模法就是和这个游戏类似。

  • 谁、哪里:PPT(Party/Place/Thing)对象
  • 什么身份:角色(Role)对象
  • 如何的:描述:(Description)对象
  • 做什么:时标型(Moment-Interval)对象


如上图,加入我们是网上买东西,如下订单了,这时候会有订单、网银记录、包裹存根等等,这些记录都是一段时间内发生的行为,这就是第一个红色。

然后我们紧接着,就是谁、在哪里,比如说用户的账户就是“谁”,产生的订单的对象是图书,还有员工在看促销记录,“在哪里”就是地理位置,这些信息就是绿颜色的内容。

下一步就是黄色,黄颜色代表的是角色,比如角色是市场总监,这个员工它是市场总监,所以他要查询整个企业的促销记录,同时是配货人,所以他要发送一个包裹出去。

最后一步是蓝色,蓝色是一个描述,书有一个描述。
把这四个串联起来,就是四色分析法
这里面一旦把一个很复杂的场景变成简单的描述,基本上实体和值对象就出来了,一般绿色和红色都会用实体或者聚合根描述,黄色和蓝色可以考虑用值对象,尤其是蓝色基本上都是值对象,黄色还可以在值对象和实体之间有一个考量。
这样一个方法比较简单,所以也比较适合与业务人员沟通,用这样一套语言把业务描述清楚,

Event Storming事件风暴

这是一个什么样的方法论呢?他要解决一个什么样的问题呢?
其实我们仔细想一想,如果整个领域你要拆分好,要建模好,其实问题很多,比如:

  • 演进式架构和迭代式开发
  • 微服务拆分和向前兼容
  • 如何和产品业务人员沟通
  • 有没有一个可以在喝茶聊天中完成微服务拆分的方法?

那么事件风暴就很好的解决了这些问题,它有以下特点:

  • 不需要画一张图
  • 没有Visio、Word和PPT
  • 准备一打便利贴
  • 全程嘴炮和贴纸小游戏,完成微服务模块拆分

下面我们以一个敏捷项目管理系统为例:

如上图,这里是微服务拆分的第一大步,最后切分成这样一个个的纵条,每个纵条其实就是一个微服务了。

当然还有第二大步:

把这些服务之间的关系梳理清楚,应该是同步调用?还是异步消息?需要提供什么样的方法进行沟通?每一个聚合与实体里面应该提供什么样的成员变量?把这些都聊清楚,架构就可以很方便的进行类图设计或者ER图设计。
整个事件风暴的过程当中,一直到拆分完所有服务,把所有服务的关联关系梳理完,这个过程不需要画图,只需要贴纸,但是后面的设计代码、进行系统部署的时候还是需要用到IT图、架构图的,这些图已经和我们产品经理、业务方没有关系了,但是全过程在有产品经理和业务方参与的当中,没有任何IT手段的参与,这才是我们事件风暴的亮点。

【死磕DDD】聊聊领域建模方法论相关推荐

  1. 【死磕DDD】领域驱动架构设计核心概念

    为什么领域驱动那么火? 它解决了架构师的一个通用问题:Do the RIGHT thing RIGHT! 领域驱动架构设计就是以客户和产品为导向,进行业务拆分的一套架构设计思路. 领域设计4层模型 它 ...

  2. 死磕 Elasticsearch 方法论:普通程序员高效精进的 10 大狠招!

    人工智能.大数据快速发展的今天,对于 TB 甚至 PB 级大数据的快速检索已然成为刚需.Elasticsearch 作为开源领域的后起之秀,从 2010 年至今得到飞跃式的发展.Elasticsear ...

  3. 如何系统学习ElasticSearch、Kibana、Logstash:死磕 Elasticsearch 方法论(初学者必看)

    目录 一.ELK Stack 的应用场景 场景一:使用 ES 作为业务系统的后端. 场景二:在原有系统中增加 ES.Logstash.Kibana等. 场景三:使用 ELK Stack 结合现有工具对 ...

  4. 聊聊MySQL的加锁规则《死磕MySQL系列 十五》

    大家好,我是咔咔 不期速成,日拱一卒 本期来聊聊MySQL的加锁规则,知道这些规则后可以判断SQL语句的加锁范围,同时也可以写出更好的SQL语句,防止幻读问题的产生,在能力范围内最大程度的提升MySQ ...

  5. 死磕Java并发:Java内存模型之总结

    本文转载自公众号: Java技术驿站 经过四篇博客阐述,我相信各位对Java内存模型有了最基本认识了,下面LZ就做一个比较简单的总结. 1.总结 JMM规定了线程的工作内存和主内存的交互关系,以及线程 ...

  6. 数据结构与算法--死磕二叉树

    死磕二叉树 近一年都比较关注算法相关的知识,也刷了不少题,之前的文章中大多也是算法相关的文章,但是感觉每次遇到树相关的题型都不能应对自如,因此还是有必要在相关知识上下功夫,因此有此次总结,以下是所有树 ...

  7. 那些在一个公司死磕了5-10年的人,最后都怎么样了?那些在一个公司死磕了5-10年的人,最后都怎么样了?...

    点击下方"IT牧场",选择"设为星标" 来源:zhihu.com/question/295529432/answer/626755505 工作和生活的平衡 顶尖 ...

  8. 专访 iOS 技术专家孙源:开发者的成长始于“死磕”

    小编语 本文为 DevLink 专访系列,本期采访嘉宾是 iDev 苹果开发者大会<链接器:Linker 与 Loader 的前世今生>的讲师--孙源.在即将到来的 iDev 大会上,他将 ...

  9. 「死磕Java并发编程」说说Java Atomic 原子类的实现原理

    <死磕 Java 并发编程>系列连载中,大家可以关注一波. 「死磕 Java 并发编程」阿里二面,面试官:说说 Java CAS 原理? 「死磕 Java 并发编程」面试官:说说什么是 J ...

  10. 【死磕NIO】— 探索 SocketChannel 的核心原理

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装配置sublime text 3(Build 3083)
  2. CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)
  3. Javascript获取当月的天数
  4. Grid不可编辑时,设置行背景颜色
  5. Install Redis on CentOS 6.4--转
  6. 【android】java.net.ConnectException: localhost/127.0.0.1:8080 - Connection refused
  7. snmp服务中snmpwalk命令常用方法总结
  8. JetBrains下载历史版本
  9. 时间管理专题_软件篇03
  10. 客户端登陆服务器用户名验证
  11. Hibernate数据查询
  12. DMA控制器8237A
  13. Beyond Compare实现Class文件对比
  14. lego_loam 代码阅读与总结
  15. 齐天大圣蟠桃园吃桃子
  16. 怎么把线稿提取出来_如何提取线稿为你所用?不会的来!
  17. java基础 equals与hashCode
  18. Chatbot 聊天机器人页面交互设计
  19. 如何向公众号添加的文档的链接
  20. 确定性随机数发生器测试向量——DRBG-CTR-AES256

热门文章

  1. Ubuntu编译MT7628的固件(openwrt)
  2. 查看Mysql数据库版本
  3. linux下的ps4手柄驱动,DS4 To XInput Wrapper
  4. ie tab 强制使用外部程序——ie view
  5. PHP通过身份证号码获取性别、出生日期、年龄等信息
  6. n9 android rom,三星N935K官方固件rom刷机包_三星N935K线刷包_系统包下载
  7. dedecms仿包图网站素材图片下载站网站源码在线付费+会员系统+积分系统
  8. 官方最新linux版idea工具ideaIU-2020.1.1.tar.gz
  9. Robo 3T使用教程--MongoDB篇(极简)
  10. 深度篇——目标检测史(五) 细说 SSD 目标检测