领域驱动设计(DDD)笔记(三)后端工程架构

server/2024/10/20 21:11:27/

文章链接

  1. 领域驱动设计(DDD)笔记(一)基本概念-CSDN博客
  2. 领域驱动设计(DDD)笔记(二)代码组织原则-CSDN博客
  3. 领域驱动设计(DDD)笔记(三)后端工程架构-CSDN博客

前导

领域驱动设计(Domain Driven Design,简称DDD)是业内主导的业务工程理论。它在各中权威人士被广泛讨论,但实际落地的具体实践缺相对较少。有人认为DDD是一个听起来高深,缺缺乏实践指导,在各大佬口中被广泛提及但是很少有下场谈具体实现的。DDD是一种听起来高大上,谈起来空洞的方法论,这里我基于代码工程角度抛砖引玉,整理出我的认识。本次我使用GO语言作为工程目录参考,后续会补充Java

DDD 是一种方法论,是“分治”思想的更详细的描述,将一个复杂的系统拆分成一个个尽可能垂直正交的小问题域,让每个问题各自约束自己的职责,从而实现整体框架的简洁清晰。DDD 本质还是遵循高内聚、低耦合的设计原则;根SOLID原则遥相呼应。DDD的战略设计是站在一个更高更抽象的角度拆分问题,战术设计原则是指导具体的落地实现细节。如果对DDD接触不深的话可以参考DDD理论基础。下面简单列一下常见的工程代码的设计方法和特点。

设计方法出发点关注点模型所处层技术方案使用场景
数据驱动设计从数据存储方案出发怎么存实体关系建模,贫血模型,只有数据基础设施层根据存储方案密关联简单的业务场景CRUD
服务驱动设计从服务提供的资源和行为能力出发提供什么服务接口对象建模,贫血模型,只有数据应用层不关注实体实现方案简单的业务场景,API服务
领域驱动设计一切围绕着领域知识进行建模领域划分和建模领域对象建模,充血模型,包括数据和方法领域层不考虑存储方式(技术实现)复杂业务场景

数据驱动设计,采用的是事物脚步的写法,这种写法适合简单、初期项目;随着业务迭代复杂会出现逻辑散乱、职责不清、重复代码、无法单测等诸多问题,常常会出现改漏导致的Bug或事故。

工程代码结构

工程代码按照clean arch 架构来进行分层,如下图

分层概述

Domain是践行面向对象编程,为当前类(go是结构体)负责,按照对象能力方式组织代码。

UseCase是面向过程的编程,为场景能力负责,


http://www.ppmy.cn/server/35061.html

相关文章

unity制作app(5)--发送数据给数据库

这个之前做过,先不做照片的。下一节再做带照片的。 第一步 收集数据 1.先做一个AppModel结构体,这个结构体需要单做的。 using System; using System.Collections.Generic; using System.Linq; using System.Text; //using Assets.Model; public clas…

MLP实现fashion_mnist数据集分类(1)-模型构建、训练、保存与加载(tensorflow)

1、查看tensorflow版本 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、fashion_mnist数据集下载与展示 (train_image,train_label),(test_image,test_label) tf.keras.datasets.fashion_mnist.l…

怎么把音频文件转化成文字?6个软件教你转换音频文件

怎么把音频文件转化成文字?6个软件教你转换音频文件 以下是六个常用的软件和方法,可以帮助您将音频文件转换为文字: 1.一键识别王: 这是一款强大的语音识别工具,可以将音频文件快速转换为文字,并提供编…

手机短信删除了怎么恢复?教你几个简单方法快速找回!

手机短信是我们日常生活中重要的沟通工具,我们用手机短信来联络亲朋好友,也用来接收来自其他软件的信息。但是有时候我们可能会不小心删除了一些重要的短信,手机短信删除了怎么恢复呢?本文将为您介绍3个简单方法,帮助您…

LangChain-RAG学习之 文档加载器

目录 一、实现原理 二、文档加载器的选择 (一).PDF 加载本地文件 可能需要的环境配置 (二).CSV 1、使用每个文档一行的 CSV 数据加载 CSVLoader 2、自定义 csv 解析和加载 (csv_args 3、指定用于 标识文档来源的 列(source_column (三)、文件目…

18.Blender 渲染工程、打光方法及HDR贴图导入

HDR环境 如何导入Blender的HDR环境图 找到材质球信息 在右上角,点击箭头,展开详细部分 点击材质球,会出现下面一列材质球,将鼠标拖到第二个材质球,会显示信息 courtyard.exr 右上角打开已渲染模式 左边这里选择世界…

(06)vite与ts的结合

文章目录 系列全集package.json在根目录创建 tsconfig.json 文件在根目录创建 vite.config.ts 文件index.html额外的类型声明 系列全集 (01)vite 从启动服务器开始 (02)vite环境变量配置 (03)vite 处理 c…

Linux搭建mysql环境

搭建 MySQL 环境 1、使用 wget 下载安装包,下载到 opt 目录中 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm2、安装 MySQL 公钥 rpm -i mysql57-community-release-el7-10.noarch.rpmrpm --import https://repo.mysql.com/RPM-GP…