Files
makemd/docs/02_Backend/02_Service_Design.md

463 lines
12 KiB
Markdown
Raw Normal View History

# 服务设计文档 (Crawlful Hub)
> **定位**Crawlful Hub 后端服务设计文档 - 定义服务层架构、服务职责和实现规范。
> **更新日期**: 2026-03-18
> **最高优先级参考**: [Business_ClosedLoops.md](../00_Business/Business_ClosedLoops.md)
---
## 1. 服务层架构
### 1.1 核心原则(逻辑集中化)
> **逻辑集中化 → 服务驱动**:所有业务逻辑必须集中在 Service 层,禁止分散在 Controller、前端或数据库操作中。
#### 强制约束
-**每个业务操作对应一个 Service**:前端的每个用户操作都必须有对应的后端 Service 处理
-**服务编排**:通过 Service 层串联多个模块,实现业务流程的完整执行
-**单一职责**:每个 Service 只负责一个核心业务领域
-**依赖注入**:通过依赖注入实现服务间的解耦
-**事务管理**:重要操作必须在事务中执行,确保数据一致性
-**状态管理统一**:所有状态更新必须通过 Service 层,禁止在 Controller 或前端直接修改
#### 禁止行为
-**Controller 中写业务逻辑**Controller 只负责请求/响应和权限校验,业务决策、状态变化、数据校验必须在 Service 层
-**前端直接写业务规则**:复杂计算、权限判断、状态流转禁止在 React 组件中实现
-**数据库操作分散**:不同模块禁止直接调用数据库,必须通过 Service 层
-**脚本或工具处理逻辑**AI 任务或异步脚本必须通过 Service 层统一调用
### 1.2 服务层级结构
```
Controller → Service (核心编排) → Repository / External API → 数据库/外部系统
```
#### Controller 层职责(强制执行)
- 接收 HTTP 请求和参数验证
- 调用 Service 层处理业务逻辑
- 返回响应给前端
- 权限校验(通过 `authorize()` 中间件)
- **禁止**:业务决策、状态变化、数据校验
#### Service 层职责(核心)
- 业务逻辑编排和状态流转
- 多模块协同和数据一致性保证
- 事务管理和异常处理
- 调用 Repository 层或外部 API
- **必须**:所有业务逻辑必须在此层实现
#### Repository 层职责
- 数据库 CRUD 操作
- 数据模型映射
- 查询优化
- **禁止**:业务逻辑处理
---
## 2. 核心服务列表
### 2.1 商品服务 (ProductService)
**职责**:管理商品全生命周期,包括创建、更新、查询、删除等操作
**核心方法**
- `createProduct()`: 创建商品
- `updateProduct()`: 更新商品信息
- `updatePrice()`: 更新商品价格,同时计算 ROI
- `getProductById()`: 根据 ID 获取商品详情
- `getProducts()`: 获取商品列表
- `deleteProduct()`: 删除商品
- `publishProduct()`: 发布商品到平台
- `unpublishProduct()`: 从平台下架商品
**依赖**
- `PricingService`: 计算价格和 ROI
- `InventoryService`: 管理商品库存
- `MediaService`: 管理商品媒体资源
### 2.2 订单服务 (OrderService)
**职责**:管理订单全生命周期,包括创建、更新、查询、处理等操作
**核心方法**
- `createOrder()`: 创建订单
- `updateOrderStatus()`: 更新订单状态
- `getOrderById()`: 根据 ID 获取订单详情
- `getOrders()`: 获取订单列表
- `processOrder()`: 处理订单(包括库存扣减、物流安排等)
- `splitOrder()`: 拆分订单
- `mergeOrders()`: 合并订单
- `handleExceptionOrder()`: 处理异常订单
**依赖**
- `InventoryService`: 管理库存
- `LogisticsService`: 安排物流
- `SettlementService`: 处理结算
### 2.3 定价服务 (PricingService)
**职责**:负责商品定价和利润计算
**核心方法**
- `calculatePrice()`: 计算商品价格
- `calculateROI()`: 计算投资回报率
- `calculateProfit()`: 计算利润
- `getPricingStrategy()`: 获取定价策略
- `updatePricingStrategy()`: 更新定价策略
**依赖**
- `CostService`: 计算成本
- `MarketService`: 分析市场价格
### 2.4 库存服务 (InventoryService)
**职责**:管理库存,包括库存查询、扣减、预警等
**核心方法**
- `getInventory()`: 获取库存信息
- `updateInventory()`: 更新库存
- `deductInventory()`: 扣减库存
- `reserveInventory()`: 预留库存
- `releaseInventory()`: 释放预留库存
- `getInventoryAlert()`: 获取库存预警
**依赖**
- `WarehouseService`: 管理仓库
### 2.5 物流服务 (LogisticsService)
**职责**:管理物流,包括物流选择、追踪、费用计算等
**核心方法**
- `selectLogisticsChannel()`: 选择物流渠道
- `calculateFreight()`: 计算运费
- `trackLogistics()`: 追踪物流状态
- `createShippingLabel()`: 创建 shipping label
**依赖**
- `ThirdPartyLogisticsAPI`: 对接第三方物流 API
### 2.6 结算服务 (SettlementService)
**职责**:管理结算,包括收入计算、佣金扣除、打款等
**核心方法**
- `calculateSettlement()`: 计算结算金额
- `processSettlement()`: 处理结算
- `createSettlementBill()`: 创建结算账单
- `processPayment()`: 处理付款
**依赖**
- `FinanceService`: 财务管理
- `PaymentService`: 支付处理
### 2.7 商户服务 (MerchantService)
**职责**:管理商户,包括商户注册、认证、管理等
**核心方法**
- `registerMerchant()`: 注册商户
- `verifyMerchant()`: 验证商户资质
- `getMerchantById()`: 获取商户详情
- `updateMerchant()`: 更新商户信息
- `suspendMerchant()`: 暂停商户
- `activateMerchant()`: 激活商户
**依赖**
- `VerificationService`: 资质验证
- `RBACService`: 权限管理
### 2.8 权限服务 (RBACService)
**职责**:管理权限,包括角色定义、权限分配等
**核心方法**
- `createRole()`: 创建角色
- `assignPermission()`: 分配权限
- `checkPermission()`: 检查权限
- `getUserRoles()`: 获取用户角色
**依赖**
- `UserService`: 用户管理
### 2.9 数据服务 (DataPipelineService)
**职责**:管理数据采集、清洗、处理等
**核心方法**
- `collectData()`: 采集数据
- `cleanData()`: 清洗数据
- `processData()`: 处理数据
- `analyzeData()`: 分析数据
**依赖**
- `PlatformApiService`: 对接平台 API
- `CrawlerService`: 网页爬虫
### 2.10 AI 服务 (AIService)
**职责**:提供 AI 相关功能,如智能定价、智能分析等
**核心方法**
- `predictPrice()`: 预测价格
- `analyzeMarket()`: 分析市场
- `optimizeStrategy()`: 优化策略
- `detectAnomaly()`: 检测异常
**依赖**
- `MachineLearningModel`: 机器学习模型
---
## 3. 服务间调用规范
### 3.1 同步调用
**适用场景**:需要立即获取结果的操作
**示例**
```typescript
// ProductService 调用 PricingService
async updatePrice(productId: string, price: number): Promise<Product> {
const product = await this.productRepository.findById(productId);
const roi = await this.pricingService.calculateROI(product, price);
product.price = price;
product.roi = roi;
return await this.productRepository.save(product);
}
```
### 3.2 异步调用
**适用场景**:不需要立即获取结果的操作,如发送通知、数据处理等
**示例**
```typescript
// OrderService 调用 NotificationService
async processOrder(orderId: string): Promise<void> {
const order = await this.orderRepository.findById(orderId);
// 处理订单
await this.orderRepository.save(order);
// 异步发送通知
this.notificationService.sendOrderConfirmation(order).catch(err => {
this.logger.error('Failed to send order confirmation', err);
});
}
```
---
## 4. 事务管理
### 4.1 事务边界
**定义**:一组操作要么全部成功,要么全部失败
**示例**
```typescript
@Transactional()
async createOrder(orderData: OrderCreateDto): Promise<Order> {
// 1. 创建订单
const order = await this.orderRepository.create(orderData);
// 2. 扣减库存
await this.inventoryService.deductInventory(
orderData.productId,
orderData.quantity
);
// 3. 记录交易
await this.transactionRepository.create({
orderId: order.id,
amount: order.totalAmount,
type: 'ORDER_CREATED'
});
return order;
}
```
### 4.2 幂等性
**定义**:同一个请求执行多次,结果应该相同
**实现**
- 使用唯一的 `requestId`
- 记录已处理的请求
- 检查重复请求
**示例**
```typescript
async processPayment(paymentData: PaymentDto): Promise<Payment> {
// 检查是否已处理
const existingPayment = await this.paymentRepository.findByRequestId(paymentData.requestId);
if (existingPayment) {
return existingPayment;
}
// 处理支付
const payment = await this.paymentRepository.create(paymentData);
return payment;
}
```
---
## 5. 错误处理
### 5.1 业务错误
**定义**:业务逻辑错误,如库存不足、权限不足等
**处理**
- 抛出业务异常
- 上层捕获并返回适当的错误信息
**示例**
```typescript
async deductInventory(productId: string, quantity: number): Promise<void> {
const inventory = await this.inventoryRepository.findByProductId(productId);
if (inventory.quantity < quantity) {
throw new BusinessException('Insufficient inventory');
}
inventory.quantity -= quantity;
await this.inventoryRepository.save(inventory);
}
```
### 5.2 系统错误
**定义**系统级错误如数据库连接失败、API 调用失败等
**处理**
- 捕获系统异常
- 记录错误日志
- 尝试重试或降级策略
- 向上层返回适当的错误信息
**示例**
```typescript
async callExternalApi(endpoint: string, data: any): Promise<any> {
try {
const response = await this.httpClient.post(endpoint, data);
return response.data;
} catch (error) {
this.logger.error(`Failed to call external API: ${endpoint}`, error);
throw new SystemException('External API error');
}
}
```
---
## 6. 日志和监控
### 6.1 业务日志
**定义**:记录业务操作的日志
**内容**
- 操作人
- 操作时间
- 操作类型
- 操作对象
- 操作结果
**示例**
```typescript
async updatePrice(productId: string, price: number): Promise<Product> {
this.logger.info(`Updating price for product ${productId} to ${price}`);
try {
const product = await this.productRepository.findById(productId);
const roi = await this.pricingService.calculateROI(product, price);
product.price = price;
product.roi = roi;
const updatedProduct = await this.productRepository.save(product);
this.logger.info(`Successfully updated price for product ${productId}`, {
oldPrice: product.oldPrice,
newPrice: price,
roi: roi
});
return updatedProduct;
} catch (error) {
this.logger.error(`Failed to update price for product ${productId}`, error);
throw error;
}
}
```
### 6.2 性能监控
**定义**:监控服务性能
**指标**
- 响应时间
- 调用次数
- 错误率
- 资源使用情况
**实现**
- 使用 Prometheus 等监控工具
- 定期分析性能数据
- 优化性能瓶颈
---
## 7. 服务版本管理
### 7.1 版本控制
**定义**:管理服务的版本
**策略**
- 使用语义化版本号
- 向后兼容
- 版本迁移计划
### 7.2 API 版本控制
**定义**:管理 API 的版本
**实现**
- 在 URL 中包含版本号
- 支持多个版本并存
- 逐步废弃旧版本
---
## 8. 部署和扩展性
### 8.1 部署策略
**定义**:服务的部署方式
**选项**
- 单体应用
- 微服务
- 容器化部署
### 8.2 扩展性
**定义**:服务的扩展能力
**实现**
- 水平扩展
- 负载均衡
- 缓存策略
- 异步处理
---
## 9. 相关文档
- [API_Specs](./API_Specs/)
- [Database_Design](./Database_Design.md)
- [Architecture_Overview](./Architecture_Overview.md)
---
*本文档基于业务闭环设计,最后更新: 2026-03-18*