Skip to content

Freedom是一个基于六边形架构的框架,可以支撑充血的领域模型范式。

License

Notifications You must be signed in to change notification settings

8treenet/freedom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Freedom DDD 框架

License Go Report Card GoDoc GitHub release

简介

Freedom 是一个基于六边形架构(Hexagonal Architecture)的 Go 语言框架,专注于支持领域驱动设计(DDD)开发范式。本框架提供了完整的基础设施和工具链,帮助开发者构建可维护、可扩展的企业级应用。

核心特性

架构支持

  • 完整实现六边形架构(端口和适配器模式)
  • 领域驱动设计(DDD)最佳实践支持
  • 依赖注入(DI)和依赖倒置原则(DIP)
  • 完全符合开闭原则的插件化设计

框架集成

  • 无缝集成 Iris Web 框架
  • 支持 HTTP/H2C 服务端和客户端
  • 内置 Prometheus 监控集成
  • 支持 AOP(面向切面编程)
  • 基于 Worker 的无侵入 Context 设计

领域模型支持

  • 聚合根(Aggregate Root)实现
  • 领域事件(Domain Events)支持
  • CQS(命令查询分离)模式
  • 实体(Entity)和值对象(Value Object)支持

数据处理

  • 自动化 CRUD 操作生成
  • PO(持久化对象)代码生成器
  • 多级缓存架构
    • 一级缓存(内存)
    • 二级缓存(分布式)
    • 缓存击穿防护

消息和事件

  • 集成消息队列组件
  • 领域事件发布订阅
  • 事件驱动架构支持

快速开始

安装框架

# 安装 Freedom 命令行工具
$ go install github.com/8treenet/freedom/freedom@latest

# 验证安装
$ freedom version

创建新项目

# 创建项目
$ freedom new-project [项目名称]

# 进入项目目录
$ cd [项目名称]

# 安装依赖
$ go mod tidy

# 运行服务
$ go run server/main.go

代码生成工具

# 生成数据库相关代码(支持两种方式)

# 1. 通过数据库连接生成
$ freedom new-po --dsn "root:密码@tcp(127.0.0.1:3306)/数据库名?charset=utf8"

# 2. 通过 JSON Schema 生成
$ freedom new-po --json ./domain/po/schema.json

# 查看更多生成选项
$ freedom new-po -h

指南

核心文档

  1. 路由指南
    • HTTP 路由配置
    • API 设计规范
  2. 服务指南
    • 服务层设计原则
    • 业务逻辑实现指南
  3. 持久化对象指南
    • PO 对象使用说明
    • 数据库操作最佳实践
  4. HTTP 客户端指南
    • HTTP 客户端配置
    • 请求处理最佳实践
  5. DDD 指南
    • 领域驱动设计实践指南
    • 架构设计原则
  6. Worker 指南
    • Worker 机制详解
    • Context 使用说明

学习资源

示例项目

  1. 基础教程

    • DDD 基础概念实践
    • 框架基本功能使用
  2. HTTP2 示例

    • HTTP2 服务配置
    • 依赖倒置实现
  3. 基础设施示例

    • 事务组件实现
    • 自定义组件开发
    • Kafka 集成
    • 领域事件使用
  4. 电商系统示例

    • 完整的电商领域实现
    • CQS 模式示例
    • 聚合根设计
    • 实体和值对象使用
    • 领域事件实践
    • 资源库模式
    • 基础设施层集成

贡献指南

欢迎提交 Issue 和 Pull Request 来帮助改进 Freedom 框架。在提交代码前,请确保:

  • 代码符合 Go 语言规范
  • 添加了必要的测试用例
  • 更新了相关文档

开源协议

本项目采用 Apache 2.0 开源协议。详见 LICENSE 文件。