DDD领域模型驱动

news/2024/7/27 12:03:34/文章来源:https://blog.csdn.net/u014474768/article/details/136680921

传统MVC架构

DDD架构:

api层:api请求方式,透传【传递参数】,几个业务对应api

业务层:做编排,业务里要有哪些服务,执行顺序是什么,以及怎么做

领域层:负责领域内调用,然后领域怎么划分

Dao层:数据库操作【或者另外一个应用 数据源之类的】

遵守原则:

①允许跨层调用

②业务细节放在领域层,业务层负责编排,一行一行对应着一个调用,最好不要有其他代码了

③领域层禁止互相调用,可以从包名入手,直接对领域进行分割,就算代码冗余也没事。

④事务管理:放业务层有大事务风险,放在领域层会有一致性问题的风险

领域层怎么划分?

①将划分好的领域在每个业务中推演一遍,看看效果如何,要多角度尝试,验证划分是否合理

②同一领域在一起,不同领域分开,不管大小

③领域模型中加代码通过SPI, 领域具体实现要用倒置依赖的关系,

④接口语义维护很重要。不同层之间参数传递的转换【转化为业务参数】和收敛【去掉冗余参数】

具体如何划分

①划分出上下文【全局中用到的东西】,把统一的动作相同的逻辑抽象在一起。

②确定哪些实体【唯一标识的类】和值对象【通用的属性 一般不再修改】应该在一起

实体:User【id/时间戳/协议】,还有方法:直接存在于实体中比如一些画图方法xxx,xxx方法

值对象:偏向于属性,Property【udp/tcp/http】,方法:协议传递的包数,传递的字节数

每个方法就是他可以做出的行为

③语义区分:同样的属性不同的含义,聚合根【VO/DO/BO整合】

④领域之间有防腐层,对参数进行转换,传递的参数叫做聚合根【VO/DO/BO整合 有实体和值对象】

聚合范畴,如何聚合:确定哪些实体和属性应该在一起

聚合根用在上下文传递过程中,会通过防腐层进行参数转换,语义也会发生变化,直到输出。

补充:

资源层:集成到实体和值对象中和聚合根中,提供数据获取的服务。

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

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

相关文章

21、设计模式之备忘录模式(Memento)

一、什么是备忘录模式 备忘录模式又称快照模式,是一种行为型设计模式。它可以在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态,以便在需要的时候恢复到原先保存的状态。 二、角色组成 源发器(Originator…

ubuntu上通过apt-get 安装指定版本的ecal

在ubuntu上想通过apt get直接安装ecal不自己编译源码安装的话, ecal官网给出的安装指令是 2. Installing eCAL — Eclipse eCAL™ sudo add-apt-repository ppa:ecal/ecal-latest sudo apt-get update sudo apt-get install ecal 要指定版本的时候 按照提示&…

基于log4cpp封装日志类

一、log4cpp的使用 1. 下载log4cpp log4cpp官方下载地址 2. 安装log4cpp 第一步:解压 tar zxvf log4cpp-1.1.4.tar.gz 第二步:进入log4cpp文件夹并执行 ./configure tips:如果是ARM架构的芯片可能会失败,如下面这种情况&…

Shell常用脚本:文件或目录一键同步到多台服务器

注意: 将本地文件,同步到【/opt/module/script/xsyncByFileIp.txt】里面的目标机器 xsyncByFile.sh #!/bin/bash# 入参参数个数 argsCount$#if(($argsCount0)); thenecho "同步失败:请输入待同步的文件或者目录" exit; fiecho &q…

如何从笔记本电脑恢复已删除的照片

人们相信照片是回忆一生中最难忘事件的最佳媒介。人们在计算机上收集超过 5 GB 的照片是很常见的。然而,在笔记本电脑上保存照片并不安全,因为您可能会因以下原因有意或无意地删除笔记本电脑上的照片: 您的笔记本电脑存储空间几乎已满。您必…

精英荟萃,共话未来 | GAS 2024完整议程揭晓!

GAS 2024即将启幕! 精彩议程,立即揭晓! *最终大会议程以现场公告为准 后续将陆续揭秘更多大会议程、嘉宾名单! 请持续关注! 2024中国国际音频产业大会(GAS) 点击链接:https://appkTQS9RSU4386.h5.xiaoek…

PFA容量瓶volumetric flask应用研究分析

容量瓶是一个透明的长颈瓶,瓶体为梨形,便于摇荡液体和刷洗。每一个PFA容量瓶上的刻度线都是用千分之一的电子天平称量、标注,PFA容量瓶以其优异的耐化学腐蚀性和热稳定性,在实验室器皿中占有重要地位。随着科学技术的不断发展&…

【牛客】VL68 同步FIFO

描述 请设计带有空满信号的同步FIFO,FIFO的深度和宽度可配置。双口RAM的参考代码和接口信号已给出,请在答案中添加并例化此部分代码。 电路的接口如下图所示。端口说明如下表。 接口电路图如下: 双口RAM端口说明: 端口名I/O描述…

StarCoder 2:GitHub Copilot本地开源LLM替代方案

GitHub CoPilot拥有超过130万付费用户,部署在5万多个组织中,是世界上部署最广泛的人工智能开发工具。使用LLM进行编程辅助工作不仅提高了生产力,而且正在永久性地改变数字原住民开发软件的方式,我也是它的付费用户之一。 低代码/…

【QT】解决Ubuntu20.04下QT5.12.0连接mysql8.0失败问题。【特详细,解决不了来找我】

Ubuntu-Qt5.12.0连接mysql8.0 环境: 1.Ubuntu 20.04 LTS 2.Qt5.12.0 mysql安装流程: sudo apt-get install mysql-server mysql-client sudo apt-get install libqt5sql5-mysql sudo apt-get install libmysqlclient20 sudo apt-get install libmysq…

金现代产品方案部部长王宁,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日,第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导,企智未来科技(LowCode低码时代、RPA中国、AIGC开放社区)主办。大会旨在聚合每一位产业成员的力量,深入探索低…

数据结构与算法--算法和算法分析

算法与数据结构之间存在密不可分的关系。简单来说,数据结构是存储和组织数据的方式,而算法则是操作和处理这些数据的方法。 首先,数据结构为算法提供了基础。算法是解决问题的步骤和流程,通过对数据结构进行操作,算法可…

Day30:安全开发-JS应用NodeJS指南原型链污染Express框架功能实现审计

目录 环境搭建-NodeJS-解析安装&库安装 功能实现-NodeJS-数据库&文件&执行 安全问题-NodeJS-注入&RCE&原型链 案例分析-NodeJS-CTF题目&源码审计 开发指南-NodeJS-安全SecGuide项目 思维导图 JS知识点: 功能:登录验证&…

《计算机网络》考研:2024/3/8 2.1.5-编码与调制(1)、2.1.6-编码与调制(2)

2024/3/8 2.1.5、2.1.6 编码与调制(1) 编码与调制(2) (据老师所解释,曼彻斯特编码在每个时钟周期内,开始时的信号也变换了一次,加上中间变换一次,因此每个周期内会变换两次。)

go切片实现原理

近日一直在学习golang,已经产出如下博客一篇 GO闭包实现原理(汇编级讲解) 引言 最近在使用go语言的切片时,出现了一些意料之外的情况,遂查询相关文档学习后写下此篇博客 正文 首先,我们思考,go在通过函数传递一个切片时,是通过引用传递的吗,还是通过值传递的呢(答案将会很…

pgsql常用索引简写

文章来源:互联网博客文章,后续有时间再来细化整理。 在数据库查询中,合理的使用索引,可以极大提升数据库查询效率,充分利用系统资源。这个随着数据量的增加得到提升,越大越明显,也和业务线有关…

进程等待详解

一、进程等待的作用 我们都知道&#xff0c;当子进程已经结束而父进程还在执行时&#xff0c;子进程会变成僵尸进程&#xff0c;造成内存泄漏等问题&#xff0c;如下&#xff1a; #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include &l…

2024/3/11打卡分巧克力(第8届蓝桥杯省赛)——二分

题目 儿童节那天有 K 位小朋友到小明家做客。 小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N 块巧克力&#xff0c;其中第 i 块是 HiWi 的方格组成的长方形。 为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。 切出的巧克力需要满足&…

面试题:Redis 为什么读写性能高?

Redis 的速度⾮常快&#xff0c;单机的 Redis 就可以⽀撑每秒十几万的并发&#xff0c;性能是 MySQL 的⼏⼗倍。速度快的原因主要有⼏点&#xff1a; 基于内存的数据存储 Redis 将数据存储在内存当中&#xff0c;使得数据的读写操作避开了磁盘 I/O。而内存的访问速度远超硬盘&a…

数据处理分类、数据仓库产生原因

个人看书学习心得及日常复习思考记录&#xff0c;个人随笔。 数据处理分类 操作型数据处理&#xff08;基础&#xff09; 操作型数据处理主要完成数据的收集、整理、存储、查询和增删改操作等&#xff0c;主要由一般工作人员和基层管理人员完成。 联机事务处理系统&#xff…