DDD领域驱动设计系列-原理篇-战略设计

概述

DDD领域驱动设计是架构方法论,适用于业务逻辑较复杂系统。

DDD核心目的能输出领域如何划分,以及架构分层如何构建。

本文章系列会分2部分讲述DDD:1、DDD原理;2、DDD实践。DDD原理分为战略及战术设计2篇来讲述;

架构的本质上就是通过定义不同组件及组件间的关系实现高扩展性,可维护性,控制复杂度(手段);最终通过架构来实现高效迭代(目的);比如一个支付渠道的接入是否能影响最小的组件实现扩展。

而DDD通过战略设计来划分出业务域以及定义不同域间的关系;这样相同域的业务需求能在一个业务域完成而不会影响到其它域,无论从开发&测试&部署维度都能影响最小。

DDD通过战述设计来找出实体,聚合,聚合根,以及确定架构分层:Clean架构,CQRS等。

原理篇整体以战略设计及战术设计做为2大章节来叙述。

战略设计

目的

产出领域模型,领域的划分,定义核心域,通用域,支撑域。最终实现:控制业务架构复杂度,提供高扩展&可维护性,从而提升业务迭代效率

概念

领域:企业要做事情集合。包含了业务流程,角色。如结算域就是一个领域,结算域涉及很多业务流程:如运营设置费用项,商家入驻生成结算合同,交易确认收货进行结算给平台及结算给商户。

子域:领域的细分。细分的目的是为了控制复杂度。如结算又可根据结算阶段分为收单,计费等子域。

核心域:企业核心能力,需要投入重点资源来跟进;比如电商中交易,供应链,支付。

通用域如用户权限域,通用域可供不同业务使用。

支撑域:电商中的服务,在垂直电商刚起步时,服务可以做为支撑域采用采购形式让业务整体能run起来。后续根据业务发展,服务变成关键要素,此时服务再提升为核心域投入重点资源进入升级。

限界上下文是业务的边界。包含若干领域或子域。在业务边界内同一个实体拥有同一个语义。原则上限界上下文必须包含完整的业务流程。如结算中的计费子域对应一个限界上下文,其中包含了运营设置计费项以及后续确认收货后计费业务流程。

怎么划分

1、领域模型确定

通常使用事件风暴来进行,如结算业务中,事件风暴如下。

2、限界上下文划分

根据领域模型业务职责分类及相关性,最终能形成计费,清算,结算,合同限界上下文;

费用项&计费单合到计费限界上下文。why?本质上费用项及计费单都是做的计费的业务事情。费用项是计费的基础。反过来如果费用项拆到其它限界上下文会发现计费的这个需求会涉及到2个域,增加了协同成本。

由于商家与财务视角看到的计费项不同,所以以商家视角单拆出清算限界上下文。

结算单对应到结算限界上下文中,这中间的语义有结算单:核心定义给商家在什么时候结算多少钱。打款单对应到打款限界上下文,对应一笔实际与出资渠道对应的一条打款流水单。

3、由限界上下文再合并成子域

计费上下文形成计费子域。合同上下文则形成结算合同子域。清算限界上下文形成清算子域。

结算及打款合成一个结算子域:结算单与打款单需要高频协同因此从团队协作上及代码维扩展上放在一个子域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/263951.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Realme X7 Pro Root 刷机教程

Realme X7 Pro 刷机教程 Just For Fun,最近倒腾了下Realme X7 Pro 刷root。此博客为个人记录刷机过程,如有机友跟随本教程操作,请谨慎操作!!! 以下教程真针对Realme X7 Pro,其他版本方法未知&…

无人机巡山护林,林业无人机智能助力绿色守护

随着全球环保意识的不断提高,无人机巡山护林已经成为解决森林巡检难题的一种独特而高效的方式。在我国,各地正积极探索无人机在森林防火、病虫害监测以及生态调查等领域的创新应用。随着无人机技术的不断演进,其在推动森林保护和可持续发展方…

每日一博 - 图解5种Cache策略

文章目录 概述读策略Cache AsideRead Through 写策略Write ThroughWrite AroundWrite Back 使用场景举例 概述 缓存是在系统中存储数据的临时存储器,用于提高访问速度。缓存策略定义了如何在缓存和主存之间管理数据 读策略 Read data from the system: &#x1f5…

大师学SwiftUI第18章Part2 - 存储图片和自定义相机

存储图片 在前面的示例中,我们在屏幕上展示了图片,但也可以将其存储到文件或数据库中。另外有时使用相机将照片存储到设备的相册薄里会很有用,这样可供其它应用访问。UIKit框架提供了如下两个保存图片和视频的函数。 UIImageWriteToSavedPh…

一文搞懂Lombok Plugins使用与原理

目录 一文搞懂Lombok使用与原理 1.前言2.什么是Lombok3. IntelliJ安装Lombok3.1通过IntelliJ的插件中心安装3.2在项目中使用Lombok Plugins 4.Lombok 注解大全说明4.1POJO类常用注解4.2其他注解 5.Lombok常见问题6.总结7.参考 文章所属专区 超链接 1.前言 2.什么是Lombok Lo…

办公自动化-批量更新tar包内文件

最近工作有点忙,学习的时间也少了,为了提高工作效率,有时候我们需要自己写一些提高办公处理效率给的工具或者脚本或者程序。 比如,我目前遇到的一个事项,需要更新很多个tar包文件,把tar包内的某个文件替换…

游戏提示找不到d3dx10_43.dll怎么办?5种方法教你如何修复

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“缺少d3dx10_43.dll文件”。这个错误提示通常出现在运行某些游戏或应用程序时,它意味着系统无法找到所需的动态链接库文件。本文将详细介绍d3dx10_43.dll文件的作用以及导致其丢…

logstash插件简单介绍

logstash插件 输入插件(input) Input:输入插件。 Input plugins | Logstash Reference [8.11] | Elastic 所有输入插件都支持的配置选项 SettingInput typeRequiredDefaultDescriptionadd_fieldhashNo{}添加一个字段到一个事件codeccodecNoplain用于输入数据的…

构建linux系统的强有力工具buildroot

目录 01. buildroot简介 1.1简介 1.2 源码下载 1.3 buildroot版本更新介绍 02. 实操演示 2.1 buildroot源码目录层级的简介 2.2 实操演示 03. 结语 01. buildroot简介 1.1简介 Buildroot是一个嵌入式Linux系统的工具链,它用于构建嵌入式设备的根文件系统。…

Kubernetes里的DNS;API资源对象ingress;Kubernetes调度;节点选择器NodeSelector;节点亲和性NodeAffinity

Kubernetes里的DNS K8s集群内有一个DNS服务: kubectl get svc -n kube-system |grep dns测试: 在tang3上安装bind-utils,目的是安装dig命令 yum install -y bind-utils apt install dnsutils #ubuntu上 解析外网域名 dig 10.15.0.10 www.baidu.com…

模型 心流

本系列文章 主要是 分享模型,涉及各个领域,重在提升认知。完全投入其中。 1 心流的应用 1.1 优秀运动员的心流体验 迈克尔乔丹(Michael Jordan):篮球之神乔丹在比赛中经常进入心流状态,他曾表示&#xff…

第四节JavaScript 条件语句、循环语句、break与continue语句

一、JavaScript条件语句 在通常的代码中,我们有一些需要决定执行不同动作,这就可以在代码中使用条件语句来完成。 下面是我们常使用的条件语句: if语句:只有当指定条件是true时,执行条件内代码。if…else语句&#…