当前位置: 首页 > news >正文

DDD架构设计

DDD架构理念介绍

DDD(Domain - Driven Design)即领域驱动设计,是一种软件开发的方法论,旨在应对复杂业务系统的开发。可以把它想象成盖房子,DDD就像是一套科学的建房方案,让房子既坚固又实用。下面是它的几个核心概念:

1. 领域

领域就是业务范围,好比房子所处的地段。例如电商系统,整个电商业务就是一个大领域,里面又可以细分出商品管理、订单管理、用户管理等小领域,这些小领域也被叫做子领域。

2. 实体和值对象
  • 实体:有唯一标识且会随着时间变化而状态改变的对象。比如电商系统里的“用户”,每个用户都有唯一的ID,用户的信息(如姓名、地址)可能会发生变化。
  • 值对象:没有唯一标识,主要通过属性来描述的对象。例如电商系统中的“商品价格”,它只关注具体的数值,没有像用户ID那样的唯一标识。
3. 聚合和聚合根
  • 聚合:是一组关联的实体和值对象的集合,它们作为一个整体被管理。比如订单聚合,包含订单实体、订单项实体(值对象)等。
  • 聚合根:是聚合中的一个实体,它是对外的唯一入口,负责管理聚合内部的对象。在订单聚合中,订单实体就是聚合根。
4. 领域服务

当一些业务逻辑无法放在实体或值对象中时,就需要领域服务来处理。比如在电商系统中,计算订单总价的逻辑,可能涉及多个订单项和优惠规则,就可以放在领域服务中。

5. 仓储

仓储负责实体的持久化操作,就像一个仓库管理员。它封装了数据访问的细节,让领域层不需要关心数据是如何存储在数据库中的。

基于Golang的DDD项目目录结构及说明

project/
├── cmd/
│   └── main.go
├── internal/
│   ├── domain/
│   │   ├── entity/
│   │   │   ├── user.go
│   │   │   └── order.go
│   │   ├── valueobject/
│   │   │   ├── price.go
│   │   │   └── address.go
│   │   ├── aggregate/
│   │   │   └── order_aggregate.go
│   │   ├── service/
│   │   │   └── order_service.go
│   │   └── repository/
│   │       ├── user_repository.go
│   │       └── order_repository.go
│   ├── application/
│   │   ├── dto/
│   │   │   ├── user_dto.go
│   │   │   └── order_dto.go
│   │   └── service/
│   │       ├── user_app_service.go
│   │       └── order_app_service.go
│   └── infrastructure/
│       ├── persistence/
│       │   ├── user_repository_impl.go
│       │   └── order_repository_impl.go
│       └── database/
│           └── db.go
└── api/├── http/│   ├── user_handler.go│   └── order_handler.go└── docs/└── swagger.yaml

目录说明

1. cmd 目录

这个目录存放项目的入口文件,通常是 main.go。它负责初始化应用程序,启动服务等操作,就像房子的大门,是进入系统的起点。

2. internal 目录

这是项目的核心业务逻辑所在,被划分为三个子目录:

  • domain 目录:存放领域模型相关的代码,是业务的核心部分。

    • entity 目录:存放实体对象的定义,如 user.go 定义用户实体,order.go 定义订单实体。
    • valueobject 目录:存放值对象的定义,像 price.go 定义商品价格,address.go 定义地址。
    • aggregate 目录:存放聚合根的定义,如 order_aggregate.go 定义订单聚合根。
    • service 目录:存放领域服务的实现,例如 order_service.go 实现订单相关的业务逻辑。
    • repository 目录:定义仓储接口,如 user_repository.goorder_repository.go 分别定义用户和订单的仓储接口。
  • application 目录:负责协调领域层和基础设施层,实现用例。

    • dto 目录:存放数据传输对象(DTO),用于在不同层之间传输数据,如 user_dto.goorder_dto.go
    • service 目录:存放应用服务的实现,如 user_app_service.goorder_app_service.go 负责处理用户和订单相关的用例。
  • infrastructure 目录:提供基础设施支持,如数据库访问、消息队列等。

    • persistence 目录:实现仓储接口,如 user_repository_impl.goorder_repository_impl.go 分别实现用户和订单的仓储接口。
    • database 目录:存放数据库连接和配置相关的代码,如 db.go 负责初始化数据库连接。
3. api 目录

这个目录负责处理外部接口,与客户端进行交互。

  • http 目录:存放 HTTP 处理程序,如 user_handler.goorder_handler.go 分别处理用户和订单相关的 HTTP 请求。
  • docs 目录:存放 API 文档,如 swagger.yaml 用于生成 Swagger 文档,方便开发者了解 API 的使用方法。

相关文章:

  • 数据结构与算法学习导航
  • 【python】pysharm常用快捷键使用-(1)
  • Linux 常用命令总结
  • 个人博客系统后端 - 用户信息管理功能实现指南(上)
  • PTA:模拟EXCEL排序
  • XCZU7EG‑L1FFVC1156I 赛灵思XilinxFPGA ZynqUltraScale+ MPSoC EG
  • jdk node redis nginx mysql直接部署
  • 性能测试方案设计思路总结
  • ADVB发送器设计
  • api护照查验-GO国内护照查验接口-身份安全卫士
  • 操作教程|通过DataEase制作MaxKB系统数据大屏
  • 【前端】跟着maxkb学习流程图画法
  • 【含文档+PPT+源码】基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现
  • 读书笔记 -- MySQL架构
  • 音视频学习 - ffmpeg 编译与调试
  • webgl入门实例-09索引缓冲区示例
  • 【华为】OSPF震荡引起CPU占用率高怎么解决?
  • SvelteKit 最新中文文档教程(21)—— 最佳实践之图片
  • Python-基于协同过滤的推荐系统详解:从经典方法到前沿技术
  • 使用mybatisPlus自带的分页方法+xml实现数据分页
  • 沃旭能源因成本上升放弃英国海上风电项目,或损失近40亿元
  • 玉渊谭天丨中方为何此时同意与美方接触?出于这三个考虑
  • 溢价26.3%!保利置业42.4亿元竞得上海杨浦宅地,楼板价80199元/平方米
  • 安徽六安原市长潘东旭,已任省市场监督管理局党组书记、局长
  • 重庆动物园大熊猫被游客扔玻璃瓶,相同地方曾被扔可乐瓶
  • 视觉周刊|劳动开创未来