• DDD相关概念描述


    传统三层架构->DDD四层架构
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    分层英文描述
    表现层User Interface用户界面层,或者表现层,负责向用户显示解释用户命令 (避免暴露服务端的业务逻辑以及关键数据的外泄,保持领域逻辑的干净)
    应用层Application Layer定义软件要完成的任务,并且指挥协调领域对象进行不同的操作。该层不包含业务领域知识。(应用测不关注具体业务的实现,只负责用户表现层和领域层的连接,协调领域层,它主要关注的是对领域层中各个对象进行流程编排,串联整个用例请求。)
    领域层Domain Layer也可称为模型层,系统的核心,负责表达业务概念,业务状态信息以及业务规则。即包含了该领域(问题域)所有复杂的业务知识抽象和规则定义。该层主要精力要放在领域对象分析上,可以从实体,值对象,聚合(聚合根),领域服务,领域事件,仓储,工厂等方面入手(领域层关注实现领域对象的充⾎模型和聚合本⾝的原⼦业务逻辑,⽤户操作和业务流程,则交给应⽤层去编排。)
    基础设施层Infrastructure Layer主要有2方面内容,一是为领域模型提供持久化机制,当软件需要持久化能力时候才需要进行规划;一是对其他层提供通用的技术支持能力,如消息通信,通用工具,配置等的实现;(该层向上层提供通用的能力,比如API网关这种基础设施可以为应用层传递消息,数据库、缓存这种基础设施可以为领域层提供持久化能力)
    类型英文描述解释
    值对象value object无唯一标识的简单对象描述事物的对象;更准确的说,一个没有概念上标识符描述一个领域方面的对象。这些对象是用来表示临时的事物,或者可以认为值对象是实体的属性,这些属性没有特性标识但同时表达了领域中某类含义的概念。通常值对象不具有唯一id,由对象的属性描述,可以用来传递参数或对实体进行补充描述。实体具有唯一标识,而值对象没有唯一标识,这是实体和值对象间的最大不同。值对象另外一个明显的特征是不可变,即所有属性都是只读的。因为属性是只读的,所以可以被安全的共享;当共享值对象时,一般有复制和共享两种做法,具体采用哪种做法还要根据实际情况而定。
    实体entity充血的领域模型,有唯一标识一个由它的标识定义的对象叫做实体。通常实体具备唯一id,能够被持久化,具有业务逻辑,对应现实世界业务对象。实体一般和主要的业务/领域对象有一个直接的关系。一个实体的基本概念是一个持续抽象的生命,可以变化不同的状态和情形,但总是有相同的标识。
    聚合(聚合根)aggregate实体的聚合,拥有聚合根,可为某一个实体聚合是用来定义领域对象所有权和边界的领域模式。 一个聚合是一组相关的被视为整体的对象。每个聚合都有一个根对象(聚合根实体),从外部访问只能通过这个对象。根实体对象有组成聚合所有对象的引用,但是外部对象只能引用根对象实体。只有聚合根才能使用仓储库直接查询,其它的只能通过相关的聚合访问。如果根实体被删除,聚合内部的其它对象也将被删除。通常,我们把聚合组织到一个文件夹或一个包中。每一个聚集对应一个包,并且每个聚集成员包括实体、值对象,domain事件,仓储接口和其它工厂对象。
    领域服务service无法归类到某个具体领域模型的行为所有的service只负责协调并委派业务逻辑给领域对象进行处理,其本身并真正实现业务逻辑,绝大部分的业务逻辑都由领域对象承载和实现了
    仓储repository持久化相关,与基础设施层关联仓储是用来管理实体的集合。仓储还有一个重要的特征就是分为仓储定义部分和仓储实现部分,我们在领域模型中定义仓储的接口,而在基础设施层实现具体的仓储。也符合按照接口分离模式在领域层定义仓储库接口的原则。
    工厂factory负责复杂对象创建
    模块module子模块引入,可以理解为子域划分
    事件event

    https://mp.weixin.qq.com/s/x4HjK8t6mPAg1vQWa3PrSg

    代码结构:

    ├─com.company.microservice
    │ │
    │ ├─apis API接口层
    │ │ ├─model 视图模型,数据模型定义 vo/dto(大多数情況是一样的)
    │ │ ├─assembler 装配器,实现模型转换eg. apiModel<=> domainModel
    │ │ └─controller 控制器,对外提供(Restful)接口
    │ │
    │ ├─application 应用层
    │ │ ├─service 应用服务,非核心服务
    │ │ ├─task 任务定义,协调领域模型
    │ │ └─*** others
    │ │
    │ ├─domain 领域层
    │ │ ├─common 公共代码抽取,限于领域层有效
    │ │ ├─events 领域事件
    │ │ ├─model 领域模型
    │ │ │ ├─dict 领域划分的模块,可理解为子域划分
    │ │ │ │ ├─DictVo.java 领域值对象
    │ │ │ │ ├─DictEntity.java 领域实体,充血的领域模型,如本身的CRUD操作在此处
    │ │ │ │ ├─DictAgg.java 领域聚合,通常表现为实体的聚合,需要有聚合根
    │ │ │ │ └─DictService.java 领域服务,不能归与上述模型,如分页条件查询等可写在此处
    │ │ │ ├─xxx
    │ │ │ │ ├─xxxEntity.java
    │ │ │ │ ├─bbbAgg.java
    │ │ │ │ └─cccAgg.java
    │ │ ├─service 领域服务类,一些不能归属某个具体领域模型的行为
    │ │ └─factory 工厂类,负责复杂领域对象创建,封装细节
    │ │
    │ ├─infrastructure 基础设施层
    │ │ ├─persistent 持久化机制
    │ │ │ ├─po 持久化对象
    │ │ │ └─repository 仓储类,持久化接口&实现,可与ORM映射框架结合
    │ │ ├─general 通用技术支持,向其他层输出通用服务
    │ │ │ ├─config 配置类
    │ │ │ ├─toolkit 工具类
    │ │ │ └─common 基础公共模块等
    │ │
    │ └─resources
    │ ├─statics 静态资源
    │ ├─template 系统页面
    │ └─application.yml 全局配置文件

    原文:https://blog.csdn.net/qq359605040/article/details/121989540

  • 相关阅读:
    计算机毕业设计 SSM+Vue旅游信息平台系统 景区旅游系统 旅游咨询信息系统 旅游网址管理系统Java Vue MySQL数据库 远程调试 代码讲解
    使用pdf.js预览pdf遇到的问题总结
    Linux常用工具集
    分布式共识协议 Raft 是如何工作的?
    嵌入式之总线协议:1、UART
    【英语:基础进阶_语法进阶提升】F5.定语从句
    IDEA常用快捷键汇总
    NBMiner42.1版本发布,完全解锁30系LHR版本显卡
    限流模块再理解
    【Mongoose笔记】入门使用
  • 原文地址:https://blog.csdn.net/weixin_43049725/article/details/127427586