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. Advanced Installer 9.8打包实录

    原文 Advanced Installer 9.8打包实录 主要介绍:(1)创建工程,(2)创建快捷方式及其图标(3)卸载设置 创建工程(.net为例): 工程创建完成....接下来进行简单设置 开始 ...

  2. 【甘道夫】官方网站MapReduce代码注释具体实例

    引言 1.本文不描写叙述MapReduce入门知识,这类知识网上非常多.请自行查阅 2.本文的实例代码来自官网 http://hadoop.apache.org/docs/current/hadoop ...

  3. 【Linux】CentOS系统

    版本号:CentOS release 5.7 1)查看系统版本号 cat  /etc/readhat-release 2)安装软件 wget  资源链接 make make install 在线安装: ...

  4. 排序(4)---------希尔(shell)排序(C语言实现)

    由于考试耽搁了几天,不好意思~~~ 前面的介绍的三种排序算法,都属于简单排序,大家能够看下详细算法,时间复杂度基本都在0(n^2),这样呢,非常多计算机界.数学界的牛人就非常不爽了,他们在家里想啊想, ...

  5. MongoDB初学者的配置环境和基础设施的使用

    一个.mongoDB安装 1.第一MongoDB官方网站下载安装包http://www.mongodb.org/. 依照自己的操作系统进行下载. 2.在硬盘上建立两个文件夹分辨存放mongoDB安装文 ...

  6. bigdata_hive_Issue of Vectorization on Parquet table

    When Vectorization is turned on in Hive:set hive.vectorized.execution.enabled=true;If the involved t ...

  7. hdu1086(线段相交)

    题目意思: 给出n个线段,推断这n条线段中,线段相交的对数. http://acm.hdu.edu.cn/showproblem.php?pid=1086 题目分析: 此题主要写出推断线段相交的函数, ...

  8. springmvc4

    web项目(使用html视图解析器)   完整配置springmvc4,最终视图选择的是html,非静态文件. 最近自己配置spring的时候,遇到很多问题,由于开发环境和版本的变化导致网友们给出的建 ...

  9. C# 中的常用正则表达式总结

    这是我发了不少时间整理的C# 的正则表达式 ,新手朋友注意一定要手册一下哦,这样可以节省很多写代码的时间,中国自学编程网为新手朋友整理发布. 只能输入数字:"^[0-9]*$". ...

  10. java_软件发布版本_Asynch HttpClien 对比发行版本说明_Alpha、Beta、RC、GA版本的区别

    今天看了一天的apache 的httpasyncclient ,为了和默认的httpclient做个对比,httpcore是核心轻量级的提供传统阻塞IO 和 java NIO两种方式,httpclie ...