IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> DDD领域驱动设计 -> 正文阅读

[Java知识库]DDD领域驱动设计

Domain-driven design 领域驱动设计
在查询有关资料时 看到的DDD与传统的MVC最大大区别便是 模型(Model)承载着业务的属性和具体的行为,是业务表达的方式、是DDD的内核。是一个类中有属性、属性有Get/Set方法,并且业务的行为(Action)操作也是在模型类中

为什么要使用DDD,在传统模型中,所有的业务放在了service层,再加上service层的相互调用,导致一个service十分庞大,可能会有几万行代码,并且错综复杂,在外部看来完全无法了解service的全部功能,导致后期的维护和扩展成本巨大。而通过DDD模型将业务拆分为一个个领域(领域可以有子领域),这样变可以知道每一个领域的具体内容。领域通过聚合根暴露自身,外部只能通过聚合根来调用领域

差别

传统的mvc模型
在这里插入图片描述
DDD模型
在这里插入图片描述

  • 在MVC中业务全部在Service层实现,而DDD模型放到了Domin中
  • DDD中API只是为了给外界暴露
  • DDD中Domin 数据模型 不同于传统的POJO,它是充血的,包含了业务的行为。

DDD三层架构

API层

API层是作为对外打包、前端接口调用使用。Domian层是整个域模型,不能直接把它打包成maven给别人使用,也不能直接把它作为接口给前端使用,有些需要API层作为进行转换后调用Domain,对调用Domain返回的数据进行包装筛选后再返回出去。

Domain层

系统的核心层,所有具体的业务逻辑处理、事件处理等都在这层域模型中处理

Repository层

数据源代理层,Repository 层类似一个网关代理,它本身没有数据,数据都是通过它的代理来被Domain层访问,被代理的数据源可以是DB、ES还可以是HTTP、RPC任何与Domain层进行数据交互的都叫Repository。

Domain细节

Domain包含Entity,Server,ValueOject,MeteData,Factory、Repository包
其中的Model层分为Entity,Server,ValueOject这三种

  • Entity (实体)
    • 有特定的标识,标识着这个Model在系统中全局唯一
    • 内部值可以是变化的,可能存在生命周期 (比如订单对象,状态值是连续变化的)
    • 有状态的Value Object
  • Value Object (值对象)
    • 内部值是不变的,不存在生命周期 (比如地址对象不存在生命周期)
    • 无状态对象
    • Service (服务)
  • 无状态对象
    • 当一个属性或行为放在Entity、Value Object中模棱两可或不合适的时候就需要以Service的形式来呈现

其中复杂程度 由高到低分为 service -> entity -> Value Object

具体创建格式可以参照这篇文章

项目架构分层图

在这里插入图片描述
如上图,4层典型DDD分层结构,

1.展现层:controller层。无业务逻辑

2.应用服务层:此层可以包含查询逻辑,但核心业务逻辑必须下沉到领域层。

3.领域服务层:业务在这里组装。仓储(资源库)接口在此层定义。

4.基础设施层:仓储(资源库)实现层+PO持久化层。

参考文档 领域驱动设计(DDD)-基础思想 领域驱动设计
DDD领域驱动设计落地实践(十分钟看完,半小时落地)

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:11:18  更:2022-04-01 23:13:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:56:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码