DDD实践切入点(二)

承前:大型系统的支撑应用系统开发思想的变迁DDD实践切入点(一)

  从大比例结构入手已经开始了系统的建设,大家都知道需求是会不断变化不断深入的,刚开始自然是模糊的大比例结构对将要进行的系统有一个初步的认识,在不断细化的过程中明确需求。前一篇中粗略的对主要的问题进行了描述,可以看出主要有两个部分,申请单管理和审批流转,两者都与申请单关联,但关注点不同,申请单管理的重点是对申请单本身信息的维护,而审批流转中主要是以申请单的部分信息为依据进行流转的决策,所以两者申请单的模型有些许不同。

  领域模型不统一时,会有一些问题,比如:限制了集成,增加沟通成本,看上去不优雅。但大型系统领域模型完全统一并不是一种可行的经济有效的做法。强行统一模型会遇到一些问题:

   1.遗留系统模型的修改过多,风险很大;

   2.协调多个小组所使用的不同模型使之统一时成本过高,开销过大;

   3.具有一些特殊需求的模块可能不得不使用无法充分满足需求的模型,而只能讲这些无法满足的行为放到其他地方;

   4.试图用一个模型满足所有人需求可能会导致模型中包含过于复杂的选择,难以使用。

  是以统一模型的方式并不是一个好办法,在这种情况下,需要标记出不同模型之间的边界和关系。Bounded Context(界限上下文)即是用来定义每个模型的应用范围,上下文图则用来给出项目上下文以及他们之间关系的总体视图。申请单管理和流程流转就可以两个Context来分别开发。需要注意的是,这样做会引发一些问题:重复的概念和假同源。重复的概念是两个模型元素表示的实际是同一个概念,每当概念变化时,都必须修改两个地方。假同源是指对不同的概念使用了相同术语。这些情况多是由上下文边界不清晰造成的。

  上下文图可以使上下文的边界清晰,需要注意上下文之间的代码尽量不要重用,相邻上下文不必保持同样步调,上下文之间的集成需要通过接口或经过转换实现。识别每个模型在项目中的作用,并定义其Bounded Context。包括非面向对象子系统的隐含模型。为每个Bounded Context命名,并把名称添加到通用语言中。描述模型之间的接触点,明确每次交流所需的转换,并突出共享的内容。

              

  图中没有共享内容,只是申请单将流转所需条件信息和流转任务委托给流程进行处理,条件信息中包含流转所必须的申请单的模型,但此申请单模型和单据上下文中的申请单模型有些不同,这个不细说了。此处只是信息单向传送,如果有交互时,中间的流转条件需要做双向的信息转换。此外,通常多个模型在集成时可能会遇到一些障碍,有一些现成的模式用来解决这些障碍,例如:共享核心,跟随者,隔离层,Separate Way(独立自主),Open Host Service,Published Language,这些模式都是随情况而定的,或许之后在具体情况遇到时会细说,这里就不抄书了。随着项目的进行,这些模式的选择,上下文图的组织方式都有可能发生转变。这种转变的过程中也可以借助大比例结构以及精炼核心领域划分通用子领域的方式来管理模型的复杂性。精炼的一些模式有缘的话我可能会单独整理一下,因为这次只用到了一个抽象核心,所以就在之后和其他过程一起介绍,不单独说了。

 
分类: DDD
标签: DDD入门

DDD实践2的更多相关文章

  1. DDD实践切入点(二)

    最近发现下面关于上下文的理解有些问题,不太好改,暂时先不改了 承前:大型系统的支撑,应用系统开发思想的变迁,DDD实践切入点(一) 从大比例结构入手已经开始了系统的建设,大家都知道需求是会不断变化不断 ...

  2. DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能

    DDD实践案例:引入事件驱动与中间件机制来实现后台管理功能 一.引言 在当前的电子商务平台中,用户下完订单之后,然后店家会在后台看到客户下的订单,然后店家可以对客户的订单进行发货操作.此时客户会在自己 ...

  3. DDD实践(一)

    DDD实践切入点(一) 前两篇:大型系统的支撑,应用系统开发思想的变迁 之前大致说了使用DDD的前期准备,现在可以真正开始实践了,以我刚刚结束的一个简单的经典DDD方式的项目为例子,当然由于比较简单, ...

  4. DDD实践反思

    某大型互联网公司于2019年开始在XX中台财务域进行DDD实践.事后回顾,整体并没有达到预期的效果,个人也做了很多的反思和总结,形成此文. 1. 背景 为什么当时要实践DDD?其中的缘由比较复杂,可以 ...

  5. DDD实践切入点(一)

    前两篇:大型系统的支撑,应用系统开发思想的变迁 之前大致说了使用DDD的前期准备,现在可以真正开始实践了,以我刚刚结束的一个简单的经典DDD方式的项目为例子,当然由于比较简单,所以很多时候会脱离它来介 ...

  6. DDD实践

    一. 虽然招聘是主旋律,但技术还是得不断的突破.在.net core的实践中,一开始就瞄准了DDD.需要特别感谢https://github.com/EduardoPires/EquinoxProje ...

  7. 在单体应用的一些DDD实践经验

    阅读此文需要一定的DDD基础,如果你是第一次接触DDD读者,建议先去阅读一些DDD相关的书籍或者文章之后再来阅读本文. 背景 自从我在团队中推行DDD以来,我们团队经历了一系列的磨难--先是把核心项目 ...

  8. 领域驱动设计(DDD)实践之路(一)

    本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/gk-Hb84Dt7JqBRVkMqM7Eg  作者:张文博 领域驱动设计(Domain Dr ...

  9. DDD实践问题之 - 关于论坛的帖子回复统计信息的更新的思考

    之前,在用ENode开发forum案例时,遇到了关于如何实现论坛帖子的回复的统计信息如何更新的问题.后来找到了自己认为比较合理的解决方案,分享给大家.也希望能和大家交流,擦出更多的火花. 论坛核心领域 ...

随机推荐

  1. 机器人操作系统 除了Android还有一个ROS(转)

    你知道市面上的机器人都采用了哪些操作系统吗? 估计大多数人给出的答案就是 Android 了.从市面上的产品来看,基于 Android 系统开发的机器人确实是主流,但是还有一种操作系统却鲜为人知,它叫 ...

  2. git 如何让单个文件回退到指定的版本

    1.进入到文件所在文件目录,或者能找到文件的路径查看文件的修改记录 1 $ git log MainActivity.java 结果: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  3. react.js 从零开始(二)组件的生命周期

    什么是生命周期? 组件本质上是一个状态机,输入确定,输出一定确定. 当状态改变的时候 会触发不同的钩子函数,可以让开发者做出响应.. 一个组件的生命周期可以概括为 初始化:状态下 可以自定义的函数 g ...

  4. MySQL进口.sql文件和常用命令

    MySQL进口.sql文件和常用命令 在MySQL Qurey   Brower中直接导入*.sql脚本,是不能一次运行多条sql命令的.在mysql中运行sql文件的命令: mysql> so ...

  5. Sql Server之旅——第五站 确实不得不说的DBCC命令

    原文:Sql Server之旅--第五站 确实不得不说的DBCC命令 今天研发中心办年会,晚上就是各自部门聚餐了,我个人喜欢喝干红,在干红中你可以体味到那种酸甜苦辣...人生何尝不是这样呢???正好 ...

  6. LinkedBlockingQueue多线程测试

    public class FillQueueThread extends Thread { private Queue queue; public FillQueueThread(Queue queu ...

  7. CUMCM--总结

    有些事情经历一次就好,一次的经历足以成长. 其实,对于数模真的没什么要说的,也没什么好写的.从9月11日,8点见到赛题,到今天早上8点的提交,短短的三天,度过寂静的黑夜,见到微曦的黎明.三天三夜,9个 ...

  8. 运用TWaver 3D 矢量图形处理能力

    的确,提起TWaver,大家想到的首先是"电信拓扑图组件".事实上.因为其灵活的MVC架构.矢量化设计.方便定制等特点.TWaver能够做的还有非常多.比如房地产行业常见到的&qu ...

  9. elasticsearch的rest搜索--- 查询

    目录: 一.针对这次装B 的解释 二.下载,安装插件elasticsearch-1.7.0   三.索引的mapping 四. 查询 五.对于相关度的大牛的文档 四. 查询 1. 查询的官网的文档   ...

  10. MacOS10.9平台配置Appium+Java环境

    1) 安装JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html   ...