最近发现下面关于上下文的理解有些问题,不太好改,暂时先不改了

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

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

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

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

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

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

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

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

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

              

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

DDD实践切入点(二)的更多相关文章

  1. DDD实践切入点(一)

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

  2. DDD实践2

    DDD实践切入点(二) 承前:大型系统的支撑,应用系统开发思想的变迁,DDD实践切入点(一) 从大比例结构入手已经开始了系统的建设,大家都知道需求是会不断变化不断深入的,刚开始自然是模糊的大比例结构对 ...

  3. DDD实践(一)

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

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

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

  5. DDD实践反思

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

  6. [独孤九剑]持续集成实践(二)– MSBuild语法入门

    本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...

  7. Scrum&Kanban在移动开发团队的实践 (二)

    Scrum&Kanban在移动开发团队的实践系列: Scrum&Kanban在移动开发团队的实践 (一) Scrum&Kanban在移动开发团队的实践 (二) 在第一篇分享文章 ...

  8. Xamarin.Android开发实践(二)

    原文:Xamarin.Android开发实践(二) 一.准备 开始学习本教程前必须先完成该教程http://www.cnblogs.com/yaozhenfa/p/xamarin_android_qu ...

  9. 基于Sql Server 2008的分布式数据库的实践(二)

    原文 基于Sql Server 2008的分布式数据库的实践(二) 从Win7连接Win2003的Sql Server 2008 1.新建链接服务器链接到Win2003的Sql Server 2008 ...

随机推荐

  1. SQL Server 致程序员(容易忽略的错误)

    标签:SQL SERVER/MSSQL/DBA/T-SQL好习惯/数据库/需要注意的地方/程序员/容易犯的错误/遇到的问题 概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见 ...

  2. 菜鸟学Struts2——Results

    在对Struts2的Action学习之后,对Struts2的Result进行学习.主要对Struts2文档Guides中的Results分支进行学习,如下图: 1.Result Types(Resul ...

  3. Js 变量声明提升和函数声明提升

    Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...

  4. Hawk 4.6 并行化

    并行化 Hawk支持单机并行化,也就是使用多线程获取数据.它可以控制目前所有任务的数量,为了不给网站造成过大的压力,仅当任务池中的任务数量小于一定值后,才会插入新的任务. 你可以在数据清洗的 执行面板 ...

  5. [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密

    string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...

  6. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

  7. Http请求

    HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的.HTTP有两类报文:请求报文和响应报文. 请求报文 一个HTTP请求报文由请求行(request line ...

  8. BPM与 SAP & Oracle EBS集成解决方案分享

    一.需求分析 SAP和Oracle EBS都是作为全球顶级的的ERP产 品,得到了众多客户的青睐.然而由于系统庞大.价格昂贵以及定位不同,客户在实施过程中经常会面临以下困惑: 1.SAP如何实现&qu ...

  9. Eclipse出现"Running Android Lint has encountered a problem"解决方案

    安装eclipse for android 时候的错误记录,转载自:http://blog.csdn.net/chenyufeng1991/article/details/47442555 (1)打开 ...

  10. git多账号登录问题

    作者:白狼 出处:http://www.manks.top/git-multiply-accounts.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文 ...