# 域与服务的关系及目录架构设计 ## 🤔 域 vs 服务的关系 ### 核心概念 - **域 (Domain)** = **业务边界**,是逻辑概念 - **服务 (Service)** = **技术实现**,是物理部署单元 ### 关系图解 ``` Domain (域) ├── Service A (微服务A) ├── Service B (微服务B) └── Service C (微服务C) ``` **一个域可以包含多个微服务,也可以是一个微服务。** ## 🏗️ 具体的域-服务映射 ### 方案一:一域一服务 (推荐给中小型项目) ``` ├── user-domain/ # 用户域 │ └── user-service/ # 用户服务 (包含用户+企业+认证) ├── security-domain/ # 安全域 │ └── security-service/ # 安全服务 (加密+白名单+密钥) ├── product-domain/ # 产品域 │ └── product-service/ # 产品服务 (产品管理+权限控制) ├── data-domain/ # 数据服务域 │ └── data-service/ # 数据服务 (统一数据网关) ├── billing-domain/ # 计费域 │ └── billing-service/ # 计费服务 (钱包+扣费+账单) ├── audit-domain/ # 审计域 │ └── audit-service/ # 审计服务 (日志+记录) └── gateway-domain/ # 网关域 └── gateway-service/ # 网关服务 ``` ### 方案二:一域多服务 (适合大型项目) ``` ├── user-domain/ # 用户域 │ ├── user-service/ # 用户管理服务 │ ├── enterprise-service/ # 企业认证服务 │ └── auth-service/ # 认证授权服务 ├── security-domain/ # 安全域 │ ├── encryption-service/ # 加密解密服务 │ ├── whitelist-service/ # 白名单服务 │ └── key-management-service/ # 密钥管理服务 ├── data-domain/ # 数据服务域 │ ├── data-gateway-service/ # 数据网关服务 │ ├── risk-service/ # 风险评估服务 (原FLXG) │ ├── credit-service/ # 征信服务 (原JRZQ) │ ├── company-service/ # 企业信息服务 (原QYGL) │ └── query-service/ # 数据查询服务 (原IVYZ) └── ... ``` ## 📁 推荐的目录架构设计 ### 整体项目结构 (基于你的项目) ``` tianyuan-api-platform/ ├── domains/ # 业务域目录 │ ├── user-domain/ # 用户域 │ │ └── user-service/ # 用户服务 │ │ ├── cmd/ # 应用入口 │ │ │ ├── server/main.go # 服务器入口 │ │ │ ├── cli/main.go # CLI工具 │ │ │ └── migrator/main.go # 数据库迁移 │ │ ├── api/ # API定义 │ │ │ ├── grpc/ # gRPC定义 │ │ │ │ └── user.proto │ │ │ └── http/ # HTTP API定义 │ │ │ └── user.api │ │ ├── internal/ # 内部实现 │ │ │ ├── domain/ # 领域层 │ │ │ │ ├── entity/ # 实体 │ │ │ │ │ ├── user.go │ │ │ │ │ └── enterprise.go │ │ │ │ ├── valueobject/ # 值对象 │ │ │ │ ├── repository/ # 仓储接口 │ │ │ │ │ └── user_repository.go │ │ │ │ └── service/ # 领域服务 │ │ │ │ └── user_domain_service.go │ │ │ ├── application/ # 应用层 │ │ │ │ ├── service/ # 应用服务 │ │ │ │ │ └── user_app_service.go │ │ │ │ ├── dto/ # 数据传输对象 │ │ │ │ └── command/ # 命令处理 │ │ │ ├── infrastructure/ # 基础设施层 │ │ │ │ ├── persistence/ # 持久化 │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── user_repository_impl.go │ │ │ │ │ └── redis/ │ │ │ │ ├── messaging/ # 消息队列 │ │ │ │ └── external/ # 外部服务 │ │ │ └── interfaces/ # 接口适配器 │ │ │ ├── grpc/ # gRPC适配器 │ │ │ │ └── user_grpc_handler.go │ │ │ ├── http/ # HTTP适配器 │ │ │ │ └── user_http_handler.go │ │ │ └── event/ # 事件处理 │ │ ├── configs/ # 配置文件 │ │ │ ├── config.yaml │ │ │ └── config.dev.yaml │ │ ├── deployments/ # 部署配置 │ │ │ ├── Dockerfile │ │ │ └── k8s/ │ │ ├── docs/ # 文档 │ │ ├── test/ # 测试 │ │ └── go.mod │ │ │ ├── data-domain/ # 数据服务域 │ │ └── data-service/ # 数据服务 (主要协调者) │ │ ├── cmd/ │ │ │ └── server/main.go │ │ ├── api/ │ │ │ └── http/ │ │ │ └── data.api │ │ ├── internal/ │ │ │ ├── domain/ │ │ │ │ └── service/ │ │ │ │ ├── risk_assessment_service.go # 原FLXG逻辑 │ │ │ │ ├── credit_check_service.go # 原JRZQ逻辑 │ │ │ │ ├── company_info_service.go # 原QYGL逻辑 │ │ │ │ ├── data_query_service.go # 原IVYZ逻辑 │ │ │ │ └── app_system_service.go # 原YYSY逻辑 │ │ │ ├── application/ │ │ │ │ └── service/ │ │ │ │ └── data_orchestrator_service.go # 主协调器 │ │ │ ├── infrastructure/ │ │ │ │ └── external/ │ │ │ │ ├── westdex_client.go # 西部数据源客户端 │ │ │ │ ├── baidu_client.go # 百度API客户端 │ │ │ │ └── aliyun_client.go # 阿里云API客户端 │ │ │ └── interfaces/ │ │ │ └── http/ │ │ │ ├── risk_handler.go # /api/v1/data/risk-assessment │ │ │ ├── credit_handler.go # /api/v1/data/credit-check │ │ │ ├── company_handler.go # /api/v1/data/company-info │ │ │ └── query_handler.go # /api/v1/data/query │ │ └── ... │ │ │ ├── security-domain/ # 安全域 │ │ └── security-service/ │ │ ├── cmd/ │ │ ├── api/grpc/ │ │ │ └── security.proto │ │ ├── internal/ │ │ │ ├── domain/ │ │ │ │ └── service/ │ │ │ │ ├── encryption_service.go # 加密解密 │ │ │ │ ├── whitelist_service.go # 白名单管理 │ │ │ │ └── key_management_service.go # 密钥管理 │ │ │ └── ... │ │ └── ... │ │ │ ├── billing-domain/ # 计费域 │ │ └── billing-service/ │ │ ├── cmd/ │ │ ├── api/grpc/ │ │ │ └── billing.proto │ │ ├── internal/ │ │ │ ├── domain/ │ │ │ │ ├── entity/ │ │ │ │ │ ├── wallet.go │ │ │ │ │ ├── transaction.go │ │ │ │ │ └── billing_record.go │ │ │ │ └── service/ │ │ │ │ ├── wallet_service.go │ │ │ │ ├── charging_service.go │ │ │ │ └── billing_service.go │ │ │ └── ... │ │ └── ... │ │ │ ├── product-domain/ # 产品域 │ │ └── product-service/ │ │ └── ... (类似结构) │ │ │ ├── audit-domain/ # 审计域 │ │ └── audit-service/ │ │ └── ... (类似结构) │ │ │ └── gateway-domain/ # 网关域 │ └── gateway-service/ │ ├── cmd/ │ │ └── server/main.go │ ├── internal/ │ │ ├── middleware/ # 中间件 │ │ │ ├── auth.go │ │ │ ├── rate_limit.go │ │ │ └── audit.go │ │ ├── router/ # 路由器 │ │ │ └── gateway_router.go │ │ └── proxy/ # 代理 │ │ └── service_proxy.go │ └── configs/ │ └── gateway.yaml │ ├── shared/ # 共享库 │ ├── pkg/ # 通用包 │ │ ├── crypto/ # 加密工具 │ │ ├── jwt/ # JWT工具 │ │ ├── response/ # 响应格式 │ │ ├── errors/ # 错误定义 │ │ ├── logger/ # 日志工具 │ │ └── utils/ # 工具函数 │ ├── events/ # 领域事件定义 │ │ ├── user_events.go │ │ ├── billing_events.go │ │ └── audit_events.go │ └── proto/ # 公共protobuf定义 │ └── common.proto │ ├── infrastructure/ # 基础设施 │ ├── docker-compose.yaml # 本地开发环境 │ ├── kubernetes/ # K8s部署文件 │ │ ├── user-service.yaml │ │ ├── data-service.yaml │ │ └── gateway-service.yaml │ ├── terraform/ # 基础设施即代码 │ └── monitoring/ # 监控配置 │ ├── prometheus/ │ └── grafana/ │ ├── tools/ # 工具和脚本 │ ├── generate/ # 代码生成器 │ ├── migration/ # 数据迁移脚本 │ └── deploy/ # 部署脚本 │ ├── docs/ # 项目文档 │ ├── architecture/ # 架构文档 │ ├── api/ # API文档 │ └── deployment/ # 部署文档 │ ├── scripts/ # 构建和部署脚本 │ ├── build.sh │ ├── deploy.sh │ └── test.sh │ ├── .github/ # GitHub Actions │ └── workflows/ │ ├── user-service.yml │ ├── data-service.yml │ └── gateway-service.yml │ ├── Makefile # 统一构建脚本 ├── docker-compose.yml # 整体服务编排 └── README.md # 项目说明 ``` ## 🔄 从当前项目的迁移策略 ### 当前项目映射关系 ``` 当前结构 → 新结构 apps/api/ → domains/data-domain/data-service/ ├── FLXG/ → internal/domain/service/risk_assessment_service.go ├── JRZQ/ → internal/domain/service/credit_check_service.go ├── QYGL/ → internal/domain/service/company_info_service.go ├── IVYZ/ → internal/domain/service/data_query_service.go └── YYSY/ → internal/domain/service/app_system_service.go apps/user/ → domains/user-domain/user-service/ apps/sentinel/ → domains/product-domain/product-service/ apps/gateway/ → domains/gateway-domain/gateway-service/ apps/admin/ → domains/admin-domain/admin-service/ apps/mqs/ → domains/audit-domain/audit-service/ pkg/ → shared/pkg/ westDex/ → domains/data-domain/data-service/internal/infrastructure/external/ ``` ### 逐步迁移计划 #### 阶段 1: 创建新的目录结构 (1 周) ```bash # 创建新的目录结构 mkdir -p domains/{user,data,security,billing,product,audit,gateway}-domain mkdir -p shared/{pkg,events,proto} mkdir -p infrastructure/{kubernetes,terraform,monitoring} ``` #### 阶段 2: 迁移共享包 (1 周) ```bash # 迁移共享代码 mv pkg/ shared/pkg/ mv westDex/ domains/data-domain/data-service/internal/infrastructure/external/westdex/ ``` #### 阶段 3: 重构数据服务域 (2-3 周) ```go // 创建数据服务协调器 // domains/data-domain/data-service/internal/application/service/data_orchestrator.go type DataOrchestrator struct { riskService *RiskAssessmentService // 原FLXG creditService *CreditCheckService // 原JRZQ companyService *CompanyInfoService // 原QYGL queryService *DataQueryService // 原IVYZ appService *AppSystemService // 原YYSY // 依赖的其他域服务 securityService SecurityServiceClient // gRPC客户端 userService UserServiceClient // gRPC客户端 productService ProductServiceClient // gRPC客户端 billingService BillingServiceClient // gRPC客户端 auditService AuditServiceClient // gRPC客户端 } func (d *DataOrchestrator) ProcessAPIRequest(ctx context.Context, req *APIRequest) (*APIResponse, error) { // 之前分析的完整流程代码 } ``` #### 阶段 4: 拆分其他域服务 (3-4 周) 逐个创建和迁移其他域服务 #### 阶段 5: 完善基础设施 (2 周) 添加监控、CI/CD、部署等 ## 🚀 实际开发工作流 ### 1. 单个服务开发 ```bash cd domains/user-domain/user-service # 开发 go run cmd/server/main.go # 测试 go test ./... # 构建 go build -o bin/user-service cmd/server/main.go # 部署 docker build -t user-service . ``` ### 2. 跨域开发 ```bash # 启动依赖服务 docker-compose up mysql redis kafka # 启动相关服务 make start-user-service make start-security-service make start-data-service # 集成测试 make test-integration ``` ### 3. 统一管理 ```makefile # Makefile .PHONY: build-all start-all test-all build-all: cd domains/user-domain/user-service && go build -o ../../../bin/user-service cmd/server/main.go cd domains/data-domain/data-service && go build -o ../../../bin/data-service cmd/server/main.go cd domains/gateway-domain/gateway-service && go build -o ../../../bin/gateway-service cmd/server/main.go start-all: docker-compose up -d test-all: cd domains/user-domain/user-service && go test ./... cd domains/data-domain/data-service && go test ./... cd domains/gateway-domain/gateway-service && go test ./... ``` ## 🎯 总结 ### 域与服务的关系: - **域 = 业务边界** (逻辑概念) - **服务 = 部署单元** (物理实现) - **推荐:一域一服务** (对于你的项目规模) ### 目录架构核心原则: 1. **按域组织** - 顶层按业务域划分 2. **标准结构** - 每个服务内部结构一致 3. **清晰分层** - 领域层、应用层、基础设施层、接口层 4. **共享复用** - 公共代码放在 shared 目录 5. **独立部署** - 每个服务都可以独立构建部署 这种架构既保持了逻辑上的清晰性,又确保了技术实现的可操作性!