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

news2024/11/20 13:23:03

概述

上篇战略设计产出了领域及问题域领域模型;详见:DDD领域驱动设计系列-原理篇-战略设计-CSDN博客

战术设计篇聚焦如何落地,包含实际解决方案模型落地,架构分层(Clean,CQRS),Reposity模式落地实践(如何维护聚合);

战略设计输入

领域划分

划分4大域:结算用户域,计费,清算,结算;

问题域领域模型

战术设计-解决方案模型

解决方案模型可以从性能及实际落地因素来考虑;在结算中由于实际要通过接收交易确认收货消息来触发结算,出于保存结算时的原始数据快照便于后续有据可依这里抽出结算收单模型

这样最终的解决方案模型如下;

战术设计-架构分层

分层架构上是采用传统MVC还是DDD的六边型,Clean架构或者洋葱架构?

结论是:使用洋葱架构,原因:以领域实体为核心沉淀业务逻辑,外层依赖内层;架构上分为application service(业务流程编排),domain service(域服务),domain实体,以及入口服务&基础设施及外部业务依赖;

这样设计好处:1、基础设施变化不影响上层业务逻辑代码;2、更易理解维护及业务逻辑复用:业务逻辑沉淀在领域实体;

架构结果

各分层架构介绍

MVC

controller,service及dao层;缺点:1、所有的业务逻辑都写在service,复用度及可理解性不够;2、service直接依赖于Dao,当dao层实现有变化导致service变化;;

六边型

六边型核心思想是抽离业务入口为适配器入口适配器依赖于应用核心接口;同时应用核心依赖于基础设施及外部业务系统接口基础设施实现依赖于应用核心

这样好处较MVC架构来讲当基础设施实现变化不会影响应用核心,eg:消息由rabbitMq切换成rocketMq,上层应用核心代码不用变;

Clean架构

和六边型思路一致:分离基础设施&外部依赖;区别是明确定义了以领域实体为核心,外层是服务;

洋葱架构

更进一步定义了域服务及流程服务application service;基础逻辑与上述六边型&clean架构一致:基础设施&外部依赖可变化但不影响应用核心逻辑代码;

战术设计-CQRS

传统我们查询也会经过applicationService及domainService,但有时查询需要的内容不仅仅是领域模型此时就会导致领域模型耦合了和领域无关的内容;如订单列表展示需要商户额外的地点信息;

这里使用CQRS(Command Query Responsibility Segregation)架构模式;

查询方面直接由Api层查询reposity,减少中间层次转换&减少查询逻辑对于领域模型的入侵

战术设计-Reposity模式使用

TODO

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Qt之QChart 图表(优美的曲线图案例)

## 项目演示 平台:ubuntu18.04 Qt版本:QT5.14.2 源码位置GitCode:https://gitcode.com/m0_45463480/QCharts/tree/main ## QChart 图表 自从 Qt 发布以来,给跨平台的用户带来很多便利。在 Qt5.7 之前,Qt 在开源社区版本里没有 Qt Charts(自带的绘图组件库)。这使得像…

蓝桥杯2020年10月青少组Python程序设计省赛真题

1、设计一个猜字母的程序,程序随机给出26个小写字母中的一个,答题者输入猜测的字母,若输入的不是26个小写字母之一,让用户重新输入,若字母在答案之前或之后,程序给出相应正确提示,如答错5次,则答题失败并退出游戏,若回答正确,程序输出回答次数并退出游戏。 2、试编一个“口…

收到口头offer千万别飘,离发书面offer还有很远!4个口头offer都没通过,血的教训!...

求职时一路过关斩将,终于收到了口头offer,算是稳了吗? 一位打工人给广大求职者一个建议: 当你收到口头offer时千万别飘!因为离最后收到书面offer有很长距离,还有下面这些事要做: 1.提交各种材料…

算法模板之队列图文详解

🌈个人主页:聆风吟 🔥系列专栏:算法模板、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. ⛳️模拟队列1.1 🔔用数组模拟实现队列1.1.1 👻队列的定…

第26关 K8s日志收集揭秘:利用Log-pilot收集POD内业务日志文件

------> 课程视频同步分享在今日头条和B站 大家好,我是博哥爱运维。 OK,到目前为止,我们的服务顺利容器化并上了K8s,同时也能通过外部网络进行请求访问,相关的服务数据也能进行持久化存储了,那么接下来…

集简云与语聚AI新增Google Gemini、Gemini Vision两大模型,让对话能力再升级

近日,人工智能又掀起一股热潮,Google最新推出的AI大模型Gemini备受瞩目。号称多模态任务处理能力首次超越人类的 AI 模型,不仅可以处理文本内容,还可以无缝丝滑地处理代码、音频、图像和视频等多种模态的信息。 随着Gemini pro版…

Python patchworklib任意合并子图,多图形混合排版

【背景】 数据展示时,在同一页面上混合排版多个图形是一种常见的用法。本次分享一个Python轮子patchworklib库:通过|、/轻松实现图形排列;比matplotlib、seaborn等自带子图功能更加灵活; 【patchworklib简介】 Patchworklib 是与 matplotl…

IDEA中使用数据库可视化操作工具

文章目录 1.入门介绍2. 没有数据库驱动3. 准备&测试连接3.1测试报错 4.连接5.编写SQL语句 1.入门介绍 在IDEA的专业版的右侧工具栏应该会有DataBase按钮如果没有的同学可以这样操作(必须是IDEA专业版) 新建数据库 2. 没有数据库驱动 如果提示: missing driver files ,…

qt项目-《图像标注软件》源码阅读笔记-类图

目录 1. 开源项目链接 2. 项目界面 3. 项目类图 3.1 形状的绘制及形状的存储 3.2 主窗口中心组件的界面管理 3.3 Command负责实现撤销和重做功能 3.4 其他类 3.5 枚举 3.5.1 Status 主窗口的状态变量 3.5.2 Mode 主窗口模式状态变量 3.5.3 shapeStatus 中心组件状态…

前菜---二叉树+堆的小练习

目录 前言🏜️ 1. 二叉树性质总结⛱️ 1.2 性质3⏰ 2. 二叉树性质小练习🏕️ 3. 答案解析💡 4. 堆概念结构小练习🪔 5. 答案解析🧿 6. 前/中/后/层序遍历小练习🔫 7. 答案解析🧺 后语…

MySQL主从架构及读写分离实战

​​​​​​ 目录 一、实验目的与环境 二、基础环境介绍 三、搭建主从集群 1、理论基础 2、同步的原理 3、搭建主从集群 3.1 配置master主服务器 3.2 配置slave从服务 3.3 主从集群测试 3.4 集群搭建扩展: 3.5、GTID同步集群 4、集群扩容 5、半同步复…

Nessus详细安装-windows (保姆级教程)

Nessus描述 Nessus 是一款广泛使用的网络漏洞扫描工具。它由 Tenable Network Security 公司开发,旨在帮助组织评估其计算机系统和网络的安全性。 Nessus 可以执行自动化的漏洞扫描,通过扫描目标系统、识别和评估可能存在的安全漏洞和弱点。它可以检测…

【数据结构入门精讲 | 第十七篇】一文讲清图及各类图算法

在上一篇中我们进行了的并查集相关练习,在这一篇中我们将学习图的知识点。 目录 概念深度优先DFS伪代码 广度优先BFS伪代码 最短路径算法(Dijkstra)伪代码 Floyd算法拓扑排序逆拓扑排序 概念 下面介绍几种在对图操作时常用的算法。 深度优先D…

【数据结构入门精讲 | 第十四篇】散列表知识点及考研408、企业面试练习(1)

在上一篇中我们进行了树的专项练习,在这一篇中我们将进行散列表知识点的学习。 目录 概念伪代码线性探测法平方探测法查找成功的平均查找长度查找失败的平均查找长度判断题选择题 概念 散列表(Hash Table),也被称为哈希表或散列映…

CogAgent:带 Agent 能力的视觉模型来了

之前我们分享过智谱AI新一代多模态大模型 CogVLM,该模型在不牺牲任何 NLP 任务性能的情况下,实现视觉语言特征的深度融合,其中 CogVLM-17B 在 14 个多模态数据集上取得最好或者第二名的成绩。 12月15日,基于 CogVLM,提…

【小沐学写作】Docsify制作在线电子书、技术文档(Docsify + Markdown + node)

文章目录 1、简介2、安装2.1 node2.2 docsify-cli 3、配置3.1 初始化3.2 预览效果3.3 加载对话框3.4 更多页面3.5 侧 栏3.6 自定义导航栏 结语 1、简介 https://docsify.js.org/#/?iddocsify 一个神奇的文档网站生成器。 简单轻巧没有静态构建的 html 文件多个主题 Docsify…

第11章 GUI Page426~427 步骤七 设置直线前景色

运行效果&#xff1a; 关键代码&#xff1a; 接口类 IItem中新增29,30行两个设置前景色纯虚方法 //item_i.hpp 抽象“图形元素”接口定义 #ifndef ITEM_I_HPP_INCLUDED #define ITEM_I_HPP_INCLUDED#include <wx/gdicmn.h> #include <wx/dc.h>class IItem { publ…

Matlab论文插图绘制模板第132期—函数等高线填充图

在之前的文章中&#xff0c;分享了Matlab函数折线图的绘制模板&#xff1a; 函数三维折线图&#xff1a; 函数网格曲面图&#xff1a; 函数曲面图&#xff1a; 函数等高线图&#xff1a; 进一步&#xff0c;再来分享一下函数等高线填充图。 先来看一下成品效果&#xff1a; 特…

HP笔记本电脑进入BIOS的方法主要有两种,它们使用场合不同

BIOS&#xff08;基本输入输出系统&#xff09;是一种实用程序&#xff0c;它在你按下电源按钮后启动并加载操作系统。无论是要更新HP笔记本电脑的BIOS系统&#xff0c;还是清除前一个系统中的错误&#xff0c;第一步都是进入BIOS实用程序。 在按键输入BIOS设置并对其进行修改…

Hadoop入门学习笔记——三、使用HDFS文件系统

视频课程地址&#xff1a;https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接&#xff1a;https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记&#xff08;汇总&#xff09; 目录 三、使用HDFS文件系统3.1. 使用命令操作HDFS文件系统3.1.…