【DDD系列-3】DDD战术设计实践分享

DDD 战术设计概念​

​​

TMF2 中的概念:​

领域能力:​

扩展点:​

DDD 战术设计使用场景​

复杂业务场景​

复杂来源面对的需求方更加多样化。​

  • 1 相同场景不同垂直业务方的需求(1688,淘宝,天猫...)​
  • 2 自身产品化的需求(限时购,拼团,自主订单...)​

共享交易中台演进​

复杂业务系统的演进 - 简书

DDD 战术设计核心思想​

复用!复用!复用!​

流程复用​

主流程复用​

​​子流程复用

能力复用

DDD 架构设计

DDD 模块设计

uc-common​

负责定义模型和接口,子模块包括:​

  • uc-base-common(通用工具模块)​
  • uc-infra-common(基础设施通用模块)​
  • uc-domain-common(领域层通用模块)​
  • uc-service-common(应用层通用模块)

uc-base-common​

职责描述​

定义工具,枚举,通用模型。​

包说明

﹂|enmu        通用枚举​
﹂|model       通用模型(DTO)在所有模板传递(避免在多个分层中转换逻辑)​
﹂|util        通过工具

uc-domain-common​

职责描述​

负责每个领域内部设计​

  • 领域服务接口​
  • 领域能力接口​
  • 扩展点接口​
  • 领域模型,聚合​

包说明

﹂|authorize      授权领域根路径​
   ﹂|model                     领域模型​
   ﹂|ability «interface»       领域能力接口​
   ﹂|extension «interface»     扩展点接口​
   ﹂|service «interface»       领域服务接口

uc-infra-common

职责描述​

负责每个领域仓库设计,防腐层设计​

  • 仓库接口设计​
  • 防腐层接口设计​

包说明

﹂|authorize      授权领域根路径​
   ﹂|remote «interface»       防腐层接口​
   ﹂|repository «interface»     仓库接口

uc-service-common

职责描述​

负责应用层设计​

  • 应用层接口设计​

包说明

﹂|authorize      授权领域根路径​
   ﹂|service  «interface»  应用层服务接口

uc-admin-interface

职责描述​

用户接口层,核心针对外部协议适配,Http协议Controller,RPC协议Service.核心是二进制从网络中获取转换成DTO,坐业务处理,并将DTO转换成二进制在网络中返回。主要关注协议,框架(SpringMvC,Dubbo)实现​

用户接口层职责:​

  • 1 参数校验​
  • 2 调用应用层服务​
  • 3 do->dto(VO)​

包说明​

﹂|config  web 配置​
﹂|exception  全局异常配置​
﹂|web   Controller 实现 

uc-authorize-application​

职责描述​

应用层是很薄的一层,不应该有业务规则或业务逻辑,主要关注业务流程。​

实现 uc-service-common 模块接口​

对于复杂的业务:可以将业务流程定义在应用引擎层​

对于简单的业务:可以将业务流程在应用层实现,通过调用领域服务编排流程​

简单的业务:​

Common 实现​

  • dto->do转换​
  • 仓库加载do​
  • 调用领域服务 (业务流程编排一个步骤)​
  • 调用领域服务 (业务流程编排一个步骤)​
  • 调用领域服务 (业务流程编排一个步骤)​
  • 仓库保存DO​
  • 防腐层发生通知​

Query 实现​

  • 仓库查询Do Or 调用领域服务查询Do​
  • 调用防腐层获取dto(如果Do无法满足Vo时候)​
  • do -> dto(Vo) 转换 Or do,dto -> dto(Vo)​

复杂业务交给流程引擎层完成。​

包说明​

﹂|converter  dto-do 相互转换​
﹂|impl  应用服务实现

uc-authorize-domain​

职责描述​

领域层负责进行业务逻辑操作,业务计算(内存计算),关注业务(而非技术实现),技术无关性,领域层是需要被仓库和防腐层保护起来​

判定领域服务好坏很重要标准就是技术无关系,外部依赖无关!​

因此我们设计更应该从上至下设计,不要想怎么存储,只用想业务逻辑!

  • 存储实现包装到仓库中​
  • 防腐层实现包装到防腐层中​

实现 uc-domain-common 模块接口​

  • 域服务实现​
  • 域能力实现​
  • 扩展点实现​

领域服务/能力/扩展点​

领域能力:面向场景的过程(步骤)

能力 :面向模型能力

​​扩展点:

包说明​

﹂|ability  领域能力实现​
﹂|service  领域服务实现​
﹂|extension  扩展点实现

uc-authorize-infra​

职责描述​

基础层负责对业务进行技术实现,其中包括存储持久化实现,外部调用实现,关注技术,性能​

实现 uc-infra-common 模块接口​

包说明​

﹂|config  持久化配置​
﹂|expand  扩展实现​
﹂|remote  防腐层实现​
     ﹂| A服务​
     ﹂| B服务​
     ﹂| C服务   ​
﹂|repository  仓库实现​
    ﹂|cache     缓存实现​
     ﹂|co       缓存数据模型​
    ﹂|es        搜索引擎实现​
     ﹂|eo       搜索引擎数据模型​
    ﹂|mapper    ORM持久化实现​
     ﹂|po       持久化数据模型​
    ﹂|converter 转换器​
    ﹂|impl      仓储实现(其内部依赖缓存实现,搜索引擎实现,ORM持久化实现)

QA​

为什么使用没有使用充血模型 ?​

  • 1 充血模型会导致所有的能力方法都放在聚合中,导致聚合对象过大,而能力本身是可以根据接口进行分类,代码可读性不高。​

  • 2 JAVA 本身是高内存使用的语言,使用充血模型,需要考虑内存消耗,工厂模型,对象池等技术问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的仓库安防系统(论文+源码)

2.1 需求分析 仓库由于存有大量物品,因此对仓库的监控非常重要,目前仓库已经普遍装有安防系统,以保证仓库的安全,本次基于单片机的仓库安防系统设计,在功能上设计如下: 用户可通过IC卡进入仓库&#xff1…

使用 AutoMQ 和 Tinybird 分析用户网购行为

前言 在当前竞争激烈的市场环境中,数据分析已成为企业实现差异化和精准营销的关键。通过分析用户行为数据,企业能够深入了解用户的习惯、偏好和行为模式,从而更精准地定位目标市场,制定个性化营销策略,并提供定制化推…

小米 R3G 路由器刷机教程(Pandavan)

小米 R3G 路由器刷机教程(Pandavan) 一、前言 小米 R3G 路由器以其高性价比和稳定的性能备受用户青睐。然而,原厂固件的功能相对有限,难以满足高级用户的个性化需求。刷机不仅可以解锁路由器的潜能,还能通过第三方固…

Python数据可视化 - Matplotlib教程

文章目录 前言一、Matplotlib简介及安装1. Matplotlib简介2. 安装Matplotlib 二、Matplotlib Pyplot1. Pyplot介绍2. Pyplot中方法介绍2.1 创建和管理图形2.2 绘制图形2.3 设置图形属性2.4 保存和展示 三、Matplotlib绘图标记1. 介绍2. 基本用法3. 标记大小与颜色4. 标记样式列…

DeepSeek 与网络安全:AI 驱动的智能防御

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 随着人工智能(AI)的快速发展,深度学习技术正渗透到多个领域,从医疗诊断到…

STM32——HAL库开发笔记19(串口中断接收实验)(参考来源:b站铁头山羊)

本实验,我们以中断的方式使得串口发送数据控制LED的闪烁速度,发送1,慢闪;发送2,速度正常;发送3,快闪。 一、电路连接图 二、实现思路&CubeMx配置 1、实现控制LED的闪烁速度 uint32_t bli…

开关电源实战(一)宽范围DC降压模块MP4560

系列文章目录 文章目录 系列文章目录MP4560MP4560 3.8V 至 55V 的宽输入范围可满足各种降压应用 MOSFET只有250mΩ 输出可调0.8V-52V SW:需要低VF肖特基二极管接地,而且要靠近引脚,高压侧开关的输出。 EN:输入使能,拉低到阈值以下关闭芯片,拉高或浮空启动 COMP:Compens…

网络IP地址冲突故障,快速解决方案!

由于网络被广泛运用,网络规模持续变大,对应的 IP 地址分配也越来越多,IP 地址冲突的情况日益严重,在一定程度上对网络的正常运行造成了影响。 要维护网络稳定、高效地运行,解决 IP 地址冲突的问题就成了网络管理里的一…

C++模拟实现二叉搜索树

目录 1.二叉搜索树概念 2.二叉搜索树的实现 2.1二叉搜索树的查找 2.2二叉树的插入 2.3二叉树的删除 3.所有代码 4.二叉搜索树的应用 5.二叉搜索树的性能分析 1.二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二…

3D渐变柱状图

代码说明 数据准备: 数据可以是任意形式的矩阵,例如 5x7 的矩阵。 行标签 (rowLabels) 和列标签 (colLabels) 是可选的,如果不需要可以删除相关部分。 颜色定义: 使用自定义的蓝黄渐变色 (map)。 如果需要其他颜色,…

完美解决 error:0308010C:digital envelope routines::unsupported

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 文章目录 windows电脑完美解决办法:设置说明…

Xilinx kintex-7系列 FPGA支持PCIe 3.0 吗?

Xilinx kintex-7系列资源如下图 Xilinx各系列的GT资源类型和性能 PCIe Gen1/2/3的传输速率对比 K7上面使用的高速收发器GTX最高速率为12.5GT/s, PCIe Gen2 每个通道的传输速率为 5 GT/s。 PCIe Gen3 每个通道的传输速率为 8 GT/s。 所以理论上硬件支持PCIe3.0&#…

支持列表拖拽嵌套,AI流式输出的多模态文档编辑器flowmix/docx: 全面升级

hi, 大家好, 我是徐小夕. 马上又到周五了, 最近也收到很多用户对 flowmix/docx 多模态文档编辑器的反馈,我们也做了一波新功能的升级,今天就和大家分享一下 flowmix/docx 多模态文档编辑器的最新更新. 演示地址: https://flowmix.turntip.cn/docx 以下是…

Mysql中使用sql语句生成雪花算法Id

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

聊聊 IP 地址和端口号的区别

在计算机网络中,两个基本概念对于理解设备如何通过网络进行通信至关重要。IP 地址和端口号是 TCP/IP 的典型特征,其定义如下:IP 地址是分配给连接到网络的每台机器的唯一地址,用于定位机器并与其通信。相反,端口号用于…

【线性代数】1行列式

1. 行列式的概念 行列式的符号表示: 行列式的计算结果:一个数 计算模型1:二阶行列式 二阶行列式: 三阶行列式: n阶行列式: 🍎计算行列式 计算模型2:上三角形行列式 上三角形行列式特征:主对角线下皆为0。 上三角形行列式: 化上三角形通用方法:主对角线下,…

问界M8细节曝光,L3自动驾驶有了!

文 | AUTO芯球 作者 | 雷慢 太惊喜了, 问界M8近距离实拍曝光了, 我看了一圈, 给大家扒出几个炸裂的信息, 注意看侧身这一堆传感器, 这可不是什么普通摄像头, 这一片传感器和和尊界S800那套一模一样&a…

支付宝 IoT 设备入门宝典(上)设备管理篇

相信不少朋友最近都被支付宝“碰一下”广告刷屏,“不用打开 APP 支付就碰一下”几个字一出简直自带BGM……其实“碰一下”就是支付宝 IoT 设备的一种,趁着热度还在,我会分为设备管理和设备经营上下两篇,简单介绍一下支付宝 IoT&am…

【Linux网络-网络基础】计算机网络背景+协议+OSI七层模型

一、计算机网络背景 网络相关概念 1.什么是网络? 网络是一种由多个节点(如计算机、手机或其他电子设备)通过通信线路或无线信号连接而成的系统。在网络中,信息可以通过这些节点进行传输和交换 2.独立模式 独立模式&#xff1…

VisionPro 划痕检测小练习

划痕检测,我这里用到的是Sobel算子和blob斑点匹配以及blob里面的形态学调整 Sobel 是一种在数字图像处理和计算机视觉领域广泛应用的算法,主要用于边缘检测 脚本展示 #region namespace imports using System; using System.Collections; using System.Drawing; …