# GoDDD：企业级 REST API 开发模板

## 项目简介

[GoDDD](https://github.com/ixugo/goddd) 是一个专注于 REST API 开发的企业级模板，旨在为 Go 开发者提供完整的 CURD 解决方案。它采用领域驱动设计（DDD）理念，通过模块化单体架构，让开发者能够快速开始项目，专注于业务开发。

## 为什么选择 GoDDD？

作为一名 Go 开发者，你是否遇到过这些问题：

- 项目结构混乱，随着业务增长变得越来越难以维护
- 新成员加入后需要很长时间才能理解项目
- 团队协作时经常出现代码冲突
- 需要重复编写大量相似的 CRUD 代码
- 错误处理方式不统一，日志记录混乱
- 项目启动时需要配置大量基础设施

GoDDD 正是为了解决这些问题而设计的。它提供了一个清晰的项目结构和完整的开发工具链，包括：

- 模块化的项目结构，让代码组织更清晰
- 统一的错误处理和日志记录
- 自动化的代码生成工具 [godddx](https://github.com/ixugo/godddx)

## 技术架构

### 架构设计理念

在传统的 MVC 单体架构中，随着业务规模的增长，项目会变得越来越臃肿，导致团队开发效率降低，新成员也难以快速理解整个系统。

GoDDD 采用模块化单体架构，这种架构既保留了单体架构的简单性，又吸收了微服务架构的模块化优势。通过将业务拆分为多个独立的领域模块（如用户领域、银行领域、商品领域等），每个领域都包含完整的：

- API（接口层）
- Core（业务核心）
- Store（数据存储）

这种设计让不同团队可以独立开发和维护各自的领域模块，有效减少代码冲突和开发混乱。与微服务相比，这种模块化方式使代码更简洁、更易于测试和维护。

更重要的是，当某个领域模块的规模超出预期时，团队可以轻松地将其提取为独立的微服务，实现平滑的架构演进。

### 技术栈

- **Web 框架**：Gin
- **ORM**：GORM
- **架构设计**：领域驱动设计（DDD）
- **代码生成**：支持自动生成代码
- **消息处理**：使用 [NSQite](github.com/ixugo/nsqite) 支持事件总线/事务消息

## 项目结构

```
.
├── cmd               # 可执行程序
├── configs           # 配置文件
├── makefile          # 提供构建/镜像/工具链等命令
├── internal          # 私有业务
│   ├── conf          # 配置模型
│   ├── core          # 业务领域
|   ├── domain        # 公共领域，提供了一些模块化的组件，用于快速开发
|	├── data 		  # 数据库初始化逻辑
│   └── web           # 公共 Web 层
└── pkg               # 依赖库
```

## 应用案例

- GB/T28181 视频平台（github.com/gowvp/gb28181）

## 总结

对于初级 Go 开发者来说，GoDDD 提供了一个清晰的项目结构和完整的开发工具链，让你能够快速上手企业级项目开发。它解决了项目结构混乱、团队协作困难、代码重复等常见问题，让开发者能够专注于业务逻辑的实现。

如果你正在寻找一个能够帮助你快速构建企业级 REST API 的框架，GoDDD 绝对值得一试。它的模块化设计和完整的工具链，能够显著提升你的开发效率和代码质量。
