Freedom DDD 框架入门指南基于六边形架构的 Go 语言企业级开发解决方案【免费下载链接】freedomFreedom是一个基于六边形架构的框架可以支撑充血的领域模型范式。项目地址: https://gitcode.com/gh_mirrors/fr/freedomFreedom 是一个基于六边形架构的 Go 语言框架专注于支持领域驱动设计DDD开发范式。本框架提供了完整的基础设施和工具链帮助开发者构建可维护、可扩展的企业级应用。无论是新手还是有经验的开发者都能通过 Freedom 快速掌握 DDD 核心概念并应用到实际项目中。 为什么选择 Freedom 框架在企业级应用开发中我们常常面临代码耦合度高、业务逻辑分散、难以维护等问题。Freedom 框架通过以下核心特性解决这些痛点完整的六边形架构支持端口与适配器模式清晰分离业务逻辑与外部依赖依赖注入自动管理组件依赖降低耦合度开闭原则插件化设计轻松扩展功能强大的 DDD 开发支持领域模型实体Entity、值对象Value Object、聚合根Aggregate Root完整实现领域事件内置事件发布订阅机制支持事件驱动架构CQS 模式命令查询分离提高代码可读性和可维护性丰富的企业级特性集成 Iris Web 框架高性能 HTTP 服务支持Prometheus 监控实时监控应用性能指标多级缓存内存缓存与分布式缓存结合提升系统性能代码生成工具自动生成 CRUD 操作和持久化对象代码 快速开始从零搭建 DDD 项目安装框架# 安装 Freedom 命令行工具 $ go install github.com/8treenet/freedom/freedomlatest # 验证安装 $ freedom version创建新项目# 创建项目 $ freedom new-project myapp # 进入项目目录 $ cd myapp # 安装依赖 $ go mod tidy # 运行服务 $ go run main.go代码生成工具Freedom 提供强大的代码生成工具简化开发流程# 通过数据库连接生成 PO 代码 $ freedom new-po --dsn root:密码tcp(127.0.0.1:3306)/数据库名?charsetutf8 # 通过 JSON Schema 生成 PO 代码 $ freedom new-po --json ./domain/po/schema.json️ DDD 核心概念与实践项目结构Freedom 推荐的 DDD 项目结构如下domain/ ├── entity/ # 实体定义 │ ├── cart.go # 购物车实体 │ ├── goods.go # 商品实体 │ └── user.go # 用户实体 │ ├── aggregate/ # 聚合定义CQS 模式 │ ├── cart_factory.go # 购物车工厂 │ ├── cart_add_cmd.go # 添加命令 │ └── cart_item_query.go # 查询 │ └── dependency/ # 领域依赖接口 └── dependency.go实体Entity实体是具有唯一标识和生命周期的领域对象封装业务行为和规则type Cart struct { freedom.Entity // 必须继承 po.Cart // 继承 PO 结构 } func (c *Cart) Identity() string { return strconv.Itoa(c.ID) } // 添加商品到购物车 func (c *Cart) AddItem(item CartItem) error { if item.Quantity 0 { return errors.New(quantity must be positive) } // 业务逻辑... return nil }聚合Aggregate聚合基于 CQS命令查询分离原则设计将写操作Command和读操作Query分离命令Command示例// CartAddCmd 添加购物车命令 type CartAddCmd struct { entity.User // 继承 User 实体 goods entity.Goods // 包含 Goods 实体 cartRepo dependency.CartRepo } // Run 执行命令 func (cmd *CartAddCmd) Run(goodsNum int) error { // 库存验证 if goodsNum cmd.goods.Stock { return errors.New(inventory not enough) } // 业务逻辑... return nil }查询Query示例// CartItemQuery 购物车查询 type CartItemQuery struct { entity.User allCart []*entity.Cart goodsMap map[int]*entity.Goods } // 计算总价 func (query *CartItemQuery) AllItemTotalPrice() (totalPrice int) { for i : 0; i len(query.allCart); i { goodsEntity : query.goodsMap[query.allCart[i].GoodsID] totalPrice query.allCart[i].Num * goodsEntity.Price } return }工厂Factory工厂负责创建聚合根封装创建逻辑并确保业务规则约束type CartFactory struct { UserRepo dependency.UserRepo // 用户仓储接口 CartRepo dependency.CartRepo // 购物车仓储接口 GoodsRepo dependency.GoodsRepo // 商品仓储接口 } // 创建添加购物车命令 func (f *CartFactory) NewCartAddCmd(goodsID, userID int) (*CartAddCmd, error) { // 验证用户 user, e : f.UserRepo.Get(userID) if e ! nil { return nil, e } // 验证商品 goods, e : f.GoodsRepo.Get(goodsID) if e ! nil { return nil, e } // 创建命令 cmd : CartAddCmd{ cartRepo: f.CartRepo, } cmd.User *user cmd.goods *goods return cmd, nil } 学习资源与文档核心文档路由指南- HTTP 路由配置与 API 设计规范服务指南- 服务层设计原则与业务逻辑实现持久化对象指南- PO 对象使用说明与数据库操作最佳实践HTTP 客户端指南- HTTP 客户端配置与请求处理DDD 指南- 领域驱动设计实践与架构设计原则Worker 指南- Worker 机制详解与 Context 使用说明示例项目基础教程- DDD 基础概念实践与框架核心功能演示HTTP2 示例- HTTP2 服务配置与依赖倒置实现基础设施示例- 事务组件、自定义组件开发、Kafka 集成与领域事件电商系统示例- 完整电商领域实现涵盖 CQS 模式、聚合根、实体值对象、领域事件、资源库模式及基础设施层集成 进阶使用领域事件在实体中发布领域事件func (u *User) ChangePassword(newPassword, oldPassword string) error { if u.Password ! oldPassword { return errors.New(Password error) } u.SetPassword(newPassword) // 发布领域事件 u.AddPubEvent(event.ChangePassword{ UserID: u.ID, NewPassword: u.Password, OldPassword: oldPassword, }) return nil }事务管理使用内置事务组件确保数据一致性// 在服务层使用事务 func (s *OrderService) CreateOrder(ctx context.Context, orderID string) error { return freedom.NewTransaction(func(tx freedom.Transaction) error { // 订单创建逻辑 order : entity.NewOrder(orderID) if err : s.OrderRepo.Save(tx, order); err ! nil { return err } // 库存扣减逻辑 return s.InventoryRepo.Decrease(tx, order.ProductID, order.Quantity) }) } 贡献与支持欢迎提交 Issue 和 Pull Request 来帮助改进 Freedom 框架。在提交代码前请确保代码符合 Go 语言规范添加了必要的测试用例更新了相关文档本项目采用 Apache 2.0 开源协议详见 LICENSE 文件。通过 Freedom 框架您可以轻松构建符合 DDD 规范的企业级应用提高代码质量和开发效率。无论您是 DDD 新手还是有经验的开发者Freedom 都能为您提供强大的支持和便捷的开发体验【免费下载链接】freedomFreedom是一个基于六边形架构的框架可以支撑充血的领域模型范式。项目地址: https://gitcode.com/gh_mirrors/fr/freedom创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考