你需要知道DDD基本知识

0 概述

2004 年埃里克·埃文斯(Eric Evans)发表了《领域驱动设计》(Domain-Driven Design –Tackling Complexity in the Heart of Software)这本书,从此领域驱动设计(Domain Driven Design,简称 DDD)诞生;领域驱动设计这一理念迅速被行业采纳,时至今日仍是绝大多数人进行业务建模的首要方法。随着Martin Fowler 提出微服务架构[2],DDD也迎来了新的时代。
 DDD 是一种架构设计的方法论;在具体落地的时候分为战略设计和战术设计,这两个阶段用于指导领域模型的设计和实现。DDD概念比较多比如:领域、子域、核心域、通用域、支撑域、限界上下文、聚合、聚合根、实体、值对象等等;这些名词,都是关键概念,但它们实在有些晦涩难懂,可能导致你还没开始实践 DDD 就打起了退堂鼓。因此,本文将结合自己工作理解对DDD相关概念总结。

1 战略设计

战略设计主要从业务视角出发,建立业务领域模型,划分领域边界,建立通用语言的限界上下文,限界上下文可以作为微服务设计的参考边界。

1.1 统一语言

定义:统一语言(Ubiquitous Language)是一种业务方与技术方共同使用的共同语言,业务方与技术方通过共同语言描述业务规则与需求变动,共同语言为双方提供了协作沟通基础。这里的业务方泛指一切非最终软件实现者(如客户、产品、业务、BI、UED等)。早期共同语言形式:用户画像(User Persona)、用户旅程能够从流程角度有效地构成共同语言,数据字典(Data Dictionary)是从软件实现侧形成的共同语言。
问题:DDD是一种模型驱动设计方法,为什么不直接使用模型模型作为统一语言呢?
在这里插入图片描述
直接使用模型作为统一语言,其效果并不理想主要原因有:1)业务方难以直接把模型和他们对系统的理解关联到一起,这主要是因为业务方看待系统的角度和开发人员不同,业务部方大多数习惯从业务维度去感知系统,如流程、交互、功能、规则、价值等去描述软件系统。2)模型则偏重于数据角度,描述不同了业务维度下,数据如何改变,以及如何支撑对应的计算与统计。3)模型是从已知的需求中总结提炼的知识,模型无法表达未知需求中尚未提炼的知识。此外统一语言可以作为中间的隔离层、提供句够的缓冲来帮助反馈模型的不足,同时也更能满足人与人之间的交流的需求。
统一语言案例:(PS:统一语言形式不重要,核心是统一语言要和模型关联,且需要多方认可&承认并达成一致)。
统一语言包含哪些东西:

  • 领域模型;源自领域模型的概念与逻辑。
  • 术语和概念;定义和约定一系列术语和概念,用于描述和表达领域中的事物、关系和行为。
  • 限界上下文;围绕领域模型设置的边界。
  • 规约和约束;对于领域模型和领域行为的规约和约束。
1.2 限界上下文

定义:限界上下文(Bounded Context)是一个显示的边界,用来封装通用语言和领域对象,提供上下文环境,保证在领域之内的一些术语、业务相关对象等(通用语言)有一个确切的含义,没有二义性。可以拆解为了两次词来理解,即限界和上下文;限界就是领域的边界,上下文则是语义环境。
Eric Evans 用细胞来形容限界上下文,因为“细胞之所以能够存在,是因为细胞膜限定了什么在细胞内,什么在细胞外,并且确定了什么物质可以通过细胞膜。”这里,细胞代表上下文,而细胞膜代表了包裹上下文的边界。

案例:我的一天建模,早上我乘坐地铁到公司上班,坐上地铁上我打开手机进入天猫好房喵屋会签到,然后我又打开微信读书读了会书并买了年卡,9点半之前到达公司开始工作。
在这里插入图片描述
不难看出下文文其实动态业务流程被边界(限界)静态切分的产物,所以产生了出行上下文、签到上下文等。每限界上下文提供不同业务能力,以满足当前上下文角色的目标;限界上下文划定领域知识的边界,形成了各自的知识语境。
案例:物流运输系统,该系统需要支持集装箱在铁路运输和公路运输的多式联运,需要计算每次多次联运的运费,以管理公司与委托公司的账目。
问题:系统定义运输上下文和财务上下文,运费计算是否可以放到财务上下文?如果从知识和能力的角度去理解,财务上下文的领域对象不具备计算运费的领域知识,不了解运输各种费用怎么计算的。缺乏这些知识自然就不具备计算运费的能力。如下图所示,财务上下文通过运输上下文,做账目结算,生成账单。限界上下文之间的复用体现对业务能力的复用而非对知识语境边界内的模型复用。
在这里插入图片描述
限界上下文特征:领域模型知识语境、业务能力纵向切分、自治的架构单元(最小完备、自我履行、独立进化、稳定空间)。
如下图所示,模块是从技术维度横向切分,再从领域维度进行纵向切分;限界上下文则是先从领域维度进行纵向切分,再从技术维度对限界上下文进行横向切分。
在这里插入图片描述
案例:供应链的商品模型,采购、订单、运输、库存都会用到商品信息(Product),但是他们所关心领域知识不一样。如果没有边界的,Product类就要包含与之相关的领域知识,使得Product领域模型变得越发臃肿。对于这种情况,可以根据限界下文拆分出不同的Product类,比如在采购上下文Product只会关心采购相关的领域知识。限界上下文告诉我们,同一个概念,不必总是对应于一个单一模型,也可以对应于多个模型。
在这里插入图片描述

1.3 上下文映射

定义:上下文映射是指将不同的限界上下文(Bounded Context)之间的概念和模型进行映射(Context-Mapping)和协调的过程。限界上下文之间映射,表达了不同领域之间如何进行交互和协同,领域之间的交互是一个复杂的问题,很多时候不仅仅和技术相关,更重要还会涉及到组织结构或者责任分配。比如:XXX领域为啥不按照我的要求提供数据,这个时候到底是谁问题呢,当我为多个领域提供服务时候,他们都对我提出很多要求。
案例:用户下单为例, 需检查商品库存量、提交订单时候需要锁定库存、和使用优惠。由此就产生了订单上下文和库存上下文、营销上文的协作必然带来领域知识传递;如果上游的提供的服务总在变化,订单开发者就需要采用一定的设计手段来避免服务变化带来的干扰。
在这里插入图片描述
DDD上下文映射主要有解决方案:共享内核、防腐层、开放主机服务、客户-供应方、遵奉者等。

1.4 核心域、支撑域、通用域

领域在不断细分&拆解不同子域,这些子域可以根据自身的重要性和功能属性,可以分为三大类,即:核心域、通用域、和支撑域,如下图所示,其中核心域是重心,支撑域和通用域为了支撑核心域的。值得说明是核心域只是一类统称,核心域可以包含多个功能子域。
核心域、支撑域和通用域的主要目标是:通过领域划分,区分不同子域在公司内的不同功能属性和重要性,从而公司可对不同子域采取不同的资源投入和建设策略,其关注度也会不一样。当然我们不能说支撑子域和通用子域是不重要的,它们也是重要的,只是我们对它们的要求并不像核心域那么高。
在这里插入图片描述

2 战术设计

战术设计则从技术视角出发,侧重于领域模型的技术实现,完成软

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在现有省、市港口信息化系统进行有效整合基础上,借鉴新 一代的感知-传输-应用技术体系,实现对码头、船舶、货物、重 大危险源、危险货物装卸过程、航管航运等管理要素的全面感知、 有效传输和按需定制服务,为行政管理人员和相关单位及人员提 供高效的管理辅助,并为公众提供便捷、实时的水运信息服务。 建立信息整合、交换和共享机制,建立健全信息化管理支撑 体系,以及相关标准规范和安全保障体系;按照“绿色循环低碳” 交通的要求,搭建高效、弹性、高可扩展性的基于虚拟技术的信 息基础设施,支撑信息平台低成本运行,实现电子政务建设和服务模式的转变。 实现以感知港口、感知船舶、感知货物为手段,以港航智能 分析、科学决策、高效服务为目的和核心理念,构建“智慧港口”的发展体系。 结合“智慧港口”相关业务工作特点及信息化现状的实际情况,本项目具体建设目标为: 一张图(即GIS 地理信息服务平台) 在建设岸线、港口、港区、码头、泊位等港口主要基础资源图层上,建设GIS 地理信息服务平台,在此基础上依次接入和叠加规划建设、经营、安全、航管等相关业务应用专题数据,并叠 加动态数据,如 AIS/GPS/移动平台数据,逐步建成航运管理处 "一张图"。系统支持扩展框架,方便未来更多应用资源的逐步整合。 现场执法监管系统 基于港口(航管)执法基地建设规划,依托统一的执法区域 管理和数字化监控平台,通过加强对辖区内的监控,结合移动平 台,形成完整的多维路径和信息追踪,真正做到问题能发现、事态能控制、突发问题能解决。 运行监测和辅助决策系统 对区域港口与航运业务日常所需填报及监测的数据经过科 学归纳及分析,采用统一平台,消除重复的填报数据,进行企业 输入和自动录入,并进行系统智能判断,避免填入错误的数据, 输入的数据经过智能组合,自动生成各业务部门所需的数据报 表,包括字段、格式,都可以根据需要进行定制,同时满足扩展 性需要,当有新的业务监测数据表需要产生时,系统将分析新的 需求,将所需字段融合进入日常监测和决策辅助平台的统一平台中,并生成新的所需业务数据监测及决策表。 综合指挥调度系统 建设以港航应急指挥中心为枢纽,以各级管理部门和经营港 口企业为节点,快速调度、信息共享的通信网络,满足应急处置中所需要的信息采集、指挥调度和过程监控等通信保障任务。 设计思路 根据项目的建设目标和“智慧港口”信息化平台的总体框架、 设计思路、建设内容及保障措施,围绕业务协同、信息共享,充 分考虑各航运(港政)管理处内部管理的需求,平台采用“全面 整合、重点补充、突出共享、逐步完善”策略,加强重点区域或 运输通道交通基础设施、运载装备、运行环境的监测监控,完善 运行协调、应急处置通信手段,促进跨区域、跨部门信息共享和业务协同。 以“统筹协调、综合监管”为目标,以提供综合、动态、实 时、准确、实用的安全畅通和应急数据共享为核心,围绕“保畅通、抓安全、促应急"等实际需求来建设智慧港口信息化平台。 系统充分整合和利用航运管理处现有相关信息资源,以地理 信息技术、网络视频技术、互联网技术、移动通信技术、云计算 技术为支撑,结合航运管理处专网与行业数据交换平台,构建航 运管理处与各部门之间智慧、畅通、安全、高效、绿色低碳的智 慧港口信息化平台。 系统充分考虑航运管理处安全法规及安全职责今后的变化 与发展趋势,应用目前主流的、成熟的应用技术,内联外引,优势互补,使系统建设具备良好的开放性、扩展性、可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值