领域驱动应用架构实践

news/2024/9/18 4:33:18 标签: 架构, DDD, 领域驱动设计, 工程架构, 应用架构

一个合适的应用架构不仅能促使项目朝着好的方向发展,易于维护,也能指导团队成员有效协作。

DDD是站在领域的角度来驱动应用架构的落地,接下来将介绍一种落地方案。

架构分层

首先在架构层次方面,在遵循DDD的分层架构模式的同时,结合六边形架构的形态,形成一种新的分层架构模式。如下所示:

在这里插入图片描述

每个层次的职责如下:

  • 适配器层(adapter),是系统流量的入口,将请求分发给应用层去处理具体应用逻辑。该层涵盖业务接口请求、批处理、消息等。
  • 门面层(facade),作为系统的门面,用于表达系统对外暴露的能力。
  • 应用层(application),是系统的应用逻辑编排层,用于做跨系统或者跨聚合的业务编排,不表达核心控制能力。
  • 领域层(domain),作为领域驱动架构的内核,其承载的是系统的核心模型、规则与服务,是整个系统的大脑所在。
  • 基础设施层(infrastructure),是系统的基座,其支撑着领域层;该层的定位主要是系统基础能力(缓存、存储等)、下游支撑系统的集成、领域能力的防腐等。

架构依赖

在工程应该架构上,各组件模块之间的依赖交互如下:

在这里插入图片描述

工程结构

在形成架构的可落地模式后,工程落地上也是很重要的,其将会影响项目的维护性以及编码落地阶段的执行策略。下面来看一种可落地的工程结构形态:

.
|-- app
|   |-- adapter
|   |-- application
|   |-- domain
|   |-- facade
|   `-- infrastructure
|       |-- acl
|       |-- dal
|       |-- integration
|-- bootstrap
|-- conf
`-- test

每个目录的含义如下:

  • app: 工程应用存放代码的目录,其中子目录是前面架构分层中所说的不同模块
  • bootstrap:应用的启动器,以及应用除环境之外的配置信息
  • conf:环境相关的配置信息
  • test:工程相关的测试代码

在工程结构上,将基础设施层按职责进行了拆分:

  • dal: 数据库交互模块
  • integration:系统集成模块,比如与下游系统的集成,其他基础能力的集成
  • acl:系统防腐层,领域与基础设置之间的防腐隔离

若想查看工程结构更详细信息,可点击 ddla架构工程规范 。

架构使用

使用如下maven命令,替换groupId、artifactId、version、package等参数为你期望的值即可,架构脚手架的版本(ddla-archetype.version)可直接使用groupId(ddla-archetype)在maven仓库搜索。

mvn archetype:generate \
    -DgroupId=com.lazycece.ddlademo \
    -DartifactId=ddlademo \
    -Dversion=1.0.0-SNAPSHOT \
    -Dpackage=com.lazycece.ddlademo \
    -DarchetypeArtifactId=ddla-archetype \
    -DarchetypeGroupId=com.lazycece.ddla \
    -DarchetypeVersion=${ddla-archetype.version}
    

开源地址

https://github.com/lazycece/ddla


http://www.niftyadmin.cn/n/438396.html

相关文章

iptables 防火墙 SNAT、DNAT

一.SNAT策略及应用 1.SNAT策略 SNAT又称源地址转换。 源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址 就是把内网地址转成指定的IP地址,这个iP地址可以访问公网 2.SNAT实验 2.1 准备工作 (1)三台服…

【Hadoop】大数据开发环境配置

【Hadoop】大数据开发环境配置 文章目录 【Hadoop】大数据开发环境配置1 设置静态ip2 设置主机名3 关闭防火墙4 ssh免密码登录5 JDK配置6 hadoop安装并配置6.1 集群节点之间时间同步6.2 SSH免密码登录完善6.3 hadoop配置 1 设置静态ip 进入ifcfg-ens33文件 vi /etc/sysconfig/n…

Java(二):Spring Boot 项目-文件的增删改查下载

Spring Boot 项目-文件的增删改查下载 准备docker运行mysql设置MySQL时区查看当前MySQL使用的时区MySQL建库建表 定义两个实体类数据表实体类查询条件实体类 工具类com/example/user/utils/FileUtil.java 用到的SQL语句mapper user/src/main/resources/mapper/FileTableDao.xml…

学习Angular的编程之旅

目录 1、简介 2、特点 2.1 横跨多种平台 2.2 速度与性能 2.3 美妙的工具 3、Angular 应用:知识要点 3.1 组件 3.2 模板 3.3 依赖注入 4、与其他框架的对比 1、简介 Angular 是一个应用设计框架与开发平台,旨在创建高效而精致的单页面应用。 A…

DuiLib的编译和运行

文章目录 1、原生DuiLib的编译和运行1.1、下载并解压成这个样子1.2、打开.sln解决方案文件1.3、编译成功 2、网易DuiLib编译和运行2.1、下载并解压成这个样子2.2、打开.sln解决方案文件2.3、编译成功 3、腾讯DuiLib编译和运行vs 20173.1、下载并解压成这个样子3.2、打开.sln解决…

改进YOLOv8 | 损失函数篇 | YOLOv8 更换损失函数之 SIoU / EIoU / WIoU / Focal_xIoU 最全汇总版

文章目录 更换方式CIoUDIoUEIoUGIoUSIoUWIoUFocal_CIoUFocal_DIoUFocal_EIoUFocal_GIoUFocal_SIoU提示更换方式 第一步:将ultralytics/yolo/utils/metrics.py文件中的bbox_iou替换为如下的代码:class

WPF开发txt阅读器10:语音播报快进快退

文章目录 MySpeech类快进 文章目录 MySpeech类快进 txt阅读器系列: 需求分析和文件读写目录提取类💎列表控件与目录字体控件绑定💎前景/背景颜色书籍管理系统💎用树形图管理书籍语音播放💎播放进度显示 MySpeech类 …

使用华为云开发者插件一键部署应用到ECS

前言 笔者是一名码龄5年左右的程序员,大学是能源行业,处于对技术(碎银几两)的热爱,选择投身搬砖之路。从用C语言在控制台打印第一句“Hello World!”开始,笔者陆续接触过C/C、Java、Golang、Py…