gin + es 实践 01

项目结构说明

目录结构概览

Go-ES 项目采用领域驱动设计(DDD)架构,目录结构清晰,各层次职责分明。以下是项目的主要目录结构:

复制代码
go-es/
├── cmd/                    # 应用程序入口
│   └── api/                # API 服务入口
├── config/                 # 配置
├── domain/                 # 领域层
│   ├── entity/             # 实体
│   ├── repository/         # 仓储接口
│   └── service/            # 领域服务
├── infrastructure/         # 基础设施层
│   ├── persistence/        # 持久化
│   ├── elasticsearch/      # ES 操作
│   └── repository/         # 仓储实现
├── interfaces/             # 接口层
│   ├── api/                # API
│   │   ├── handler/        # 处理器
│   │   ├── middleware/     # 中间件
│   │   └── router/         # 路由
│   └── dto/                # 数据传输对象
├── application/            # 应用层
│   └── service/            # 应用服务
├── docs/                   # 文档
└── pkg/                    # 公共包
    └── utils/              # 工具函数

各层详细说明

1. 领域层(Domain)

领域层是整个应用的核心,包含业务逻辑和规则,与技术实现细节无关。

实体(Entity)

domain/entity/ 目录包含核心业务实体,如 Product

  • 定义了产品的基本属性和行为
  • 包含业务规则验证
  • 提供实体转换方法
仓储接口(Repository Interface)

domain/repository/ 目录定义了仓储接口,为领域层提供数据访问抽象:

  • ProductRepository 接口定义了产品数据的存取操作
  • 隔离了领域层与数据存储实现的依赖
领域服务(Domain Service)

domain/service/ 目录包含领域服务,处理不适合放在单个实体中的业务逻辑:

  • ProductService 实现了产品相关的核心业务逻辑
  • 协调多个实体完成复杂业务场景

2. 应用层(Application)

应用层负责协调领域对象完成用户用例,是领域层与接口层之间的桥梁。

应用服务(Application Service)

application/service/ 目录包含应用服务:

  • ProductAppService 处理产品相关的用户场景
  • 负责 DTO 与领域实体之间的转换
  • 调用领域服务完成业务逻辑

3. 接口层(Interfaces)

接口层负责处理来自外部的请求,包括 API 接口、请求参数解析等。

处理器(Handler)

interfaces/api/handler/ 目录包含 API 处理器:

  • ProductHandler 处理产品相关的 HTTP 请求
  • 解析请求参数和构造响应
  • 调用应用服务完成操作
数据传输对象(DTO)

interfaces/dto/ 目录包含数据传输对象:

  • 定义 API 请求和响应的数据结构
  • 提供与领域实体之间的转换方法
路由(Router)

interfaces/api/router/ 目录设置 API 路由:

  • 注册 API 路径与处理器的映射
  • 应用中间件
中间件(Middleware)

interfaces/api/middleware/ 目录包含 HTTP 中间件:

  • 实现请求预处理,如跨域处理、认证等

4. 基础设施层(Infrastructure)

基础设施层提供技术实现,支持上层业务逻辑的运行。

持久化(Persistence)

infrastructure/persistence/ 目录处理数据库连接:

  • 提供数据库初始化和连接管理
  • 实现表结构迁移
Elasticsearch 操作

infrastructure/elasticsearch/ 目录封装 Elasticsearch 操作:

  • EsClient 提供基础的 ES 操作
  • ProductIndexer 实现产品索引管理
仓储实现(Repository Implementation)

infrastructure/repository/ 目录实现领域层定义的仓储接口:

  • ProductRepositoryImpl 实现了产品仓储接口
  • 负责数据库操作和 Elasticsearch 索引同步

5. 入口与配置

应用入口

cmd/api/main.go 是应用程序的入口点:

  • 初始化配置、数据库和 Elasticsearch
  • 构建依赖注入链
  • 启动 HTTP 服务
配置

config/ 目录处理应用配置:

  • 定义配置结构和加载逻辑
  • 提供配置访问接口

文件关系图

以下是核心组件的关系图,展示了各部分如何协同工作:

复制代码
│
├── HTTP请求  ────────────┐
│                       ↓
├── Router ────────► Handler ────────┐
│                       │            │
├── Middleware ◄────────┘            │
│                                    ↓
├── DTO ◄───────► Application Service ◄───┐
│                       │                 │
│                       ↓                 │
├── Entity ◄────── Domain Service         │
│                       │                 │
│                       ↓                 │
├── Repository Interface                  │
│          ↑                              │
│          │                              │
├── Repository Implementation ────────────┘
│          │
│          ↓
├── Database / Elasticsearch
│

这种分层架构使得代码更易于理解、测试和维护,同时也便于团队协作开发。

相关推荐
LUCIAZZZ28 分钟前
ElasticSearch基本概念
java·大数据·elasticsearch·搜索引擎·中间件·操作系统
Ftrans42 分钟前
【分享】解锁文件摆渡系统新玩法:虚拟目录助力企业效率提升
大数据·安全
海森大数据1 小时前
人工智能可信度新突破:MIT改进共形分类助力高风险医学诊断
大数据·人工智能·分类
数据与人工智能律师1 小时前
私服与外挂:刑事法律风险的深度剖析
大数据·人工智能·算法·云计算·区块链
结冰架构2 小时前
【AI提示词】马斯洛需求分析专家
大数据·人工智能·ai·需求分析·提示词
小杜谈数4 小时前
信息系统项目管理工程师备考计算类真题讲解十四
大数据
Agatha方艺璇6 小时前
Hadoop MapReduce 图文代码讲解
大数据·hadoop·mapreduce
wuli玉shell6 小时前
Spark存储级别
大数据·分布式·spark
悻运6 小时前
Spark缓存
大数据·缓存·spark
wending-Y6 小时前
es 里的Filesystem Cache 理解
大数据·elasticsearch·mybatis