DDD框架

news/2024/10/23 16:19:06/

DDD框架

参考:
https://www.cnblogs.com/daoqidelv/p/7499662.html
https://www.cnblogs.com/xiaofuge/p/12914870.html
https://www.zhihu.com/question/25089273

DDD(domain driven design领域驱动设计)框架包括
User Interface(门面层)、application(应用层)、domain(业务领域层)、infrastructure(基础设施层)

分类的依据是:越往上,预期变动越频繁;越往下,预期变动越少。
ui (controller,dto,handle,filter)->application(service,impl)->domain(service,impl)->infrastructure()

User Interface

dto:request和response两部分,通过它定义入参和出参的契约
controller:接口访问协议控制器
拦截器,全局异常处理都是属于ui模块

application

service:应用服务,主要访问领域层和公共基础设施层(消息中间件访问外部的服务)
assembler:组装器,将领域对应组装成对应的dto

domain

domain entity:领域实体,具有唯一的业务标识,常用的model,比如帖子
domain value object:领域值对象,不需要唯一的标识,比如帖子的顶置消息,直接采用帖子的id即可
domain factory:复杂领域对象的创建和重建
domain service:领域服务,区别于应用服务,领域服务是业务服务,
domain event:领域事件,消息事件,比如消息通知和订阅,实现性能和解耦
repository:仓库接口,对应的是公共服务的repository impl,这里相当于只关心接口,不关系具体的实现
translator:将持久化对象转成领域对象

infrastructure

repository impl:对domain层repository接口的实现,主要实现对数据库和缓存的访问
checkLogin:权限校验
exception:异常的分类和定义,同事提供异常的处理
transport:与第三方服务的交互
transcation:事务管理,采用spring的事务
logging:日志管理,log4j
message resource:消息资源,spring统一管理

springMVC框架与DDD框架对比

controller,service,dao
1,业务不区分领域,完全依靠service中进行区分,service经常是与数据库对应
2,dao层直接参与到service中,特别是mybatis-plus
3,消息中间件在service中实现
4,model的抽取导致结构不完整,dao和feign可以抽取,但是其他的抽取将导致不必要的麻烦。sf对不同服务进行了api抽取,api存放了service中的对象,导致在service变动对象的时候,api需要更新,另外其他的服务将会加载没有必要的jar。
其实common还存在一些非常大的隐患,在项目中经常会使用同一个类作为接口入参或者一些业务数据的接收或者封装,看起来发挥了common的作用,但是实际上当业务做大后,这个类可能被改得面目全非,如果说不要共用同一个类,那么问题来了,为什么要把类放在common中?common中最好就是存放字段不变的类或者一些工具类,特点是减少重复造轮,但是mvc和领域设计的概念是为了解耦,为了拆,而不是为了合。最佳的框架应该是有分有合,分而不散,合而不强。

这里关于common的抽取问题:https://blog.csdn.net/Amen_Wu/article/details/106709003

落地

每个分层可以抽取一部分到公共的common.jar,防止重复造轮
每个分层之间的访问都是接口访问
原则上禁止跨聚合的领域服务调用和跨聚合的数据相互关联
最终的落地方式可以从接口入手,在mvc的框架基础上对service进行拆分功能与逻辑两个模块


http://www.ppmy.cn/news/245859.html

相关文章

【ORM框架】

Django ORM框架操作数据库 Django ORM框架定义步骤样例1.定义模型类2.迁移 ORM对象构成全局配置文件settings.py中配置数据库ORM修改表中已有字段名ORM修改已有字段:模型类中修改字段名(一般不能修改id主键)重新执行迁移脚本 Django ORM框架 …

Flask-ORM框架-CRUD

使用了Flask-SQLAlchemy作为ORM框架,来更方便的对数据库进行读写,增删改查是数据库的基本操作,今天这一章节就在对原先的后端做兼容MySQL改造的同时,也对“删、改、查”做一个详细的讲解。 模型定义 上一章节在models.py中定义了…

什么是ORM框架?

ORM概念 什么是“持久化” 即把数据(如内存中的对象)保存的磁盘的某一文件中。 常用的ORM半自动框架如Mybatis,全自动ORM框架JPA。 JPA详解 什么是持久层 持久层(Persistence Layer),即实现数据持久化应用领域的一个…

SSM框架整合(企业权限管理系统)

项目简介 基于Spring、SpringMVC、Mybatis框架整合的权限管理系统,主要技术是运用了SpringSecurity框架对用户访问页面的某些模块设置权限,具体可以看下文权限控制核心内容。 开发环境和使用的技术: IntelliJ Idea 、JDK 1.8 SVN 、Orcale、…

什么是ORM以及ORM框架

1-1.对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 2-1.ORM框架是连接数据库的桥梁,只要提供了持久化类与表的映射关系,ORM框架在运行时就能…

主流的ORM框架

.NET(C#)主流的ORM框架 SqlSugarDos.ORMChloeStackExchange/DapperEntity Framework (EF)NHibernateServiceStack/ServiceStack.OrmLitelinq2dbMassivePetaPoco 介绍 1、SqlSugar是国人开发者开发的一款基于.NET的ORM框架,是可以运行在.NET 4. & .NET CORE的…

Krypital Group(金氪资本)宣布完成对Ambrus Studio的战略投资

Krypital Group(金氪资本)宣布完成对Ambrus Studio的战略投资。 关于Ambrus Studio Ambrus Studio工作室由一群充满雄心壮志的创作者组成。他们在游戏行业拥有广泛深厚的背景,并相互帮助支持,从而作为一个团队提供高质量的web3游…

2)Django ORM框架

目录 一 简介 1)作用: 2)Django ORM的模式特征 3)主要使用步骤 二 用法 1 数据库连接 2 创建数据模型 3 Django ORM 字段 ①常用字段类型 ②常用字段属性 4 基本数据操作--增删改查 5 数据操作常用函数 三 样例1&#xf…