add qygl23t7
This commit is contained in:
@@ -1,155 +0,0 @@
|
||||
# API处理器架构说明
|
||||
|
||||
## 概述
|
||||
|
||||
本目录实现了基于依赖注入容器的API处理器架构,支持灵活的依赖管理和组合调用模式。
|
||||
|
||||
## 架构模式
|
||||
|
||||
### 1. 依赖注入容器模式
|
||||
|
||||
#### ProcessorDependencies
|
||||
```go
|
||||
type ProcessorDependencies struct {
|
||||
WestDexService *westdex.WestDexService
|
||||
YushanService *yushan.YushanService
|
||||
Validator interfaces.RequestValidator
|
||||
}
|
||||
```
|
||||
|
||||
**优势:**
|
||||
- 统一的依赖管理
|
||||
- 类型安全的依赖注入
|
||||
- 易于测试和mock
|
||||
- 支持未来扩展新的服务
|
||||
|
||||
#### 处理器函数签名
|
||||
```go
|
||||
type ProcessorFunc func(ctx context.Context, params []byte, deps *ProcessorDependencies) ([]byte, error)
|
||||
```
|
||||
|
||||
### 2. 组合处理器模式
|
||||
|
||||
#### CompositeProcessor
|
||||
专门用于处理组合包(COMB系列)的处理器,支持:
|
||||
- 动态注册其他处理器
|
||||
- 批量调用多个处理器
|
||||
- 结果组合和格式化
|
||||
|
||||
```go
|
||||
type CompositeProcessor struct {
|
||||
processors map[string]ProcessorFunc
|
||||
deps *ProcessorDependencies
|
||||
}
|
||||
```
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
processors/
|
||||
├── dependencies.go # 依赖容器定义
|
||||
├── comb/
|
||||
│ ├── comb_processor.go # 组合处理器基类
|
||||
│ └── comb298y_processor.go # COMB298Y组合处理器
|
||||
├── flxg/ # FLXG系列处理器
|
||||
├── jrzq/ # JRZQ系列处理器
|
||||
├── qygl/ # QYGL系列处理器
|
||||
├── yysy/ # YYSY系列处理器
|
||||
└── ivyz/ # IVYZ系列处理器
|
||||
```
|
||||
|
||||
## 服务分配策略
|
||||
|
||||
### WestDexService
|
||||
- FLXG系列:使用WestDexService
|
||||
- JRZQ系列:使用WestDexService
|
||||
- IVYZ系列:使用WestDexService
|
||||
|
||||
### YushanService
|
||||
- QYGL系列:使用YushanService
|
||||
- YYSY系列:使用YushanService
|
||||
|
||||
### 组合包(COMB)
|
||||
- 调用多个其他处理器
|
||||
- 组合结果并返回统一格式
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 普通处理器
|
||||
```go
|
||||
func ProcessFLXG0V3Bequest(ctx context.Context, params []byte, deps *ProcessorDependencies) ([]byte, error) {
|
||||
// 参数验证
|
||||
var paramsDto dto.FLXG0V3BequestReq
|
||||
if err := json.Unmarshal(params, ¶msDto); err != nil {
|
||||
return nil, fmt.Errorf("参数校验不正确: 解密后的数据格式错误")
|
||||
}
|
||||
|
||||
if err := deps.Validator.ValidateStruct(paramsDto); err != nil {
|
||||
return nil, fmt.Errorf("参数校验不正确: %s", err.Error())
|
||||
}
|
||||
|
||||
// 调用服务
|
||||
reqData := map[string]interface{}{
|
||||
"name": paramsDto.Name,
|
||||
"idCard": paramsDto.IDCard,
|
||||
"mobile": paramsDto.Mobile,
|
||||
}
|
||||
|
||||
respBytes, err := deps.WestDexService.CallAPI("FLXG0V3B", reqData)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("调用外部服务失败: %s", err.Error())
|
||||
}
|
||||
|
||||
return respBytes, nil
|
||||
}
|
||||
```
|
||||
|
||||
### 组合处理器
|
||||
```go
|
||||
func ProcessCOMB298YRequest(ctx context.Context, params []byte, deps *ProcessorDependencies) ([]byte, error) {
|
||||
// 创建组合处理器
|
||||
compositeProcessor := NewCompositeProcessor(deps)
|
||||
|
||||
// 注册需要调用的处理器
|
||||
compositeProcessor.RegisterProcessor("FLXG0V3B", flxg.ProcessFLXG0V3Bequest)
|
||||
compositeProcessor.RegisterProcessor("JRZQ8203", jrzq.ProcessJRZQ8203Request)
|
||||
|
||||
// 调用并组合结果
|
||||
results := make(map[string]interface{})
|
||||
|
||||
flxgResult, err := compositeProcessor.CallProcessor(ctx, "FLXG0V3B", params)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("调用FLXG0V3B处理器失败: %s", err.Error())
|
||||
}
|
||||
results["flxg0v3b"] = string(flxgResult)
|
||||
|
||||
// 返回组合结果
|
||||
return compositeProcessor.CombineResults(results)
|
||||
}
|
||||
```
|
||||
|
||||
## 扩展指南
|
||||
|
||||
### 添加新的服务依赖
|
||||
1. 在 `ProcessorDependencies` 中添加新字段
|
||||
2. 更新 `NewProcessorDependencies` 构造函数
|
||||
3. 在 `ApiRequestService` 中注入新服务
|
||||
|
||||
### 添加新的处理器
|
||||
1. 在对应目录下创建新的处理器文件
|
||||
2. 实现 `ProcessorFunc` 接口
|
||||
3. 在 `RequestProcessors` 映射中注册
|
||||
|
||||
### 添加新的组合包
|
||||
1. 在 `comb/` 目录下创建新的组合处理器
|
||||
2. 使用 `CompositeProcessor` 基类
|
||||
3. 注册需要调用的处理器并组合结果
|
||||
|
||||
## 优势
|
||||
|
||||
1. **解耦**:处理器与具体服务实现解耦
|
||||
2. **可测试**:易于进行单元测试和集成测试
|
||||
3. **可扩展**:支持添加新的服务和处理器
|
||||
4. **类型安全**:编译时检查依赖关系
|
||||
5. **组合支持**:灵活的组合调用模式
|
||||
6. **维护性**:清晰的代码结构和职责分离
|
||||
Reference in New Issue
Block a user