Files
TakeoutSaaS.AdminApi/Document/02_技术架构.md
2025-11-23 09:55:11 +08:00

254 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 外卖SaaS系统 - 技术架构
## 1. 技术栈
### 1.1 后端技术栈
- **.NET 10**:最新的.NET平台提供高性能和现代化开发体验
- **ASP.NET Core Web API**构建RESTful API服务
- **Entity Framework Core 10**最新ORM框架用于复杂查询和实体管理
- **Dapper 2.1+**轻量级ORM用于高性能查询和批量操作
- **PostgreSQL 16+**主数据库支持JSON、全文搜索等高级特性
- **Redis 7.0+**:缓存和会话存储
- **RabbitMQ 3.12+**:消息队列,处理异步任务
### 1.2 开发工具和框架
- **AutoMapper**:对象映射
- **FluentValidation**:数据验证
- **Serilog**:结构化日志
- **MediatR**CQRS和中介者模式实现
- **Hangfire**:后台任务调度
- **Polly**:弹性和瞬态故障处理
- **Swagger/Swashbuckle**API文档生成
### 1.3 认证授权
- **JWT (JSON Web Token)**:无状态身份认证
- **IdentityServer/Duende IdentityServer**OAuth2.0和OpenID Connect
- **ASP.NET Core Identity**:用户身份管理
### 1.4 测试框架
- **xUnit**:单元测试框架
- **Moq**Mock框架
- **FluentAssertions**:断言库
- **Testcontainers**:集成测试容器化
### 1.5 DevOps工具
- **Docker**:容器化部署
- **Docker Compose**:本地开发环境
- **GitHub Actions/GitLab CI**CI/CD流水线
- **Nginx**:反向代理和负载均衡
## 2. 系统架构
### 2.1 整体架构
```
┌─────────────────────────────────────────────────────────────┐
│ 客户端层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ Web管理端 │ │ Web用户端 │ │ 小程序端(用户) │ │
│ └──────────┘ └──────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ API网关层 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Nginx / API Gateway (路由、限流、认证、日志) │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 应用服务层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │租户服务 │ │商家服务 │ │订单服务 │ │配送服务 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │用户服务 │ │支付服务 │ │营销服务 │ │通知服务 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 基础设施层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │PostgreSQL │ │ Redis │ │ RabbitMQ │ │ MinIO │ │
│ │ (主库) │ │ (缓存) │ │ (消息队列)│ │(对象存储) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### 2.2 分层架构
#### 2.2.1 表现层 (Presentation Layer)
- **TakeoutSaaS.AdminApi**:管理后台 Web API 项目(/api/admin/v1
- Controllers后台管理API控制器
- Filters过滤器异常处理、日志、验证
- Middleware中间件认证、租户识别、RBAC
- Models请求/响应DTO
- **TakeoutSaaS.MiniApi**:小程序/用户端 Web API 项目(/api/mini/v1
- Controllers用户端API控制器
- Filters过滤器异常处理、限流、签名校验
- Middleware中间件小程序登录态、租户识别、CORS
- Models请求/响应DTO
#### 2.2.2 应用层 (Application Layer)
- **TakeoutSaaS.Application**:应用逻辑
- Services应用服务
- DTOs数据传输对象
- Interfaces服务接口
- ValidatorsFluentValidation验证器
- MappingsAutoMapper配置
- Commands/QueriesCQRS命令和查询
#### 2.2.3 领域层 (Domain Layer)
- **TakeoutSaaS.Domain**:领域模型
- Entities实体类
- ValueObjects值对象
- Enums枚举
- Events领域事件
- Interfaces仓储接口
- Specifications规约模式
#### 2.2.4 基础设施层 (Infrastructure Layer)
- **TakeoutSaaS.Infrastructure**:基础设施实现
- Data数据访问
- EFCoreEF Core DbContext和配置
- DapperDapper查询实现
- Repositories仓储实现
- Migrations数据库迁移
- CacheRedis缓存实现
- MessageQueueRabbitMQ实现
- ExternalServices第三方服务集成
#### 2.2.5 共享层 (Shared Layer)
- **TakeoutSaaS.Shared**:共享组件
- Constants常量定义
- Exceptions自定义异常
- Extensions扩展方法
- Helpers辅助类
- Results统一返回结果
## 3. 核心设计模式
### 3.1 多租户模式
- **数据隔离策略**每个租户独立Schema
- **租户识别**通过HTTP Header或JWT Token识别租户
- **动态切换**:运行时动态切换数据库连接
### 3.2 CQRS模式
- **命令Command**:处理写操作,修改数据
- **查询Query**:处理读操作,不修改数据
- **分离优势**:读写分离,优化性能
### 3.3 仓储模式
- **抽象数据访问**:统一数据访问接口
- **EF Core仓储**:复杂查询和事务处理
- **Dapper仓储**:高性能查询和批量操作
### 3.4 工作单元模式
- **事务管理**:统一管理数据库事务
- **批量提交**:减少数据库往返次数
### 3.5 领域驱动设计DDD
- **聚合根**:定义实体边界
- **值对象**:不可变对象
- **领域事件**:解耦业务逻辑
## 4. 数据访问策略
### 4.1 EF Core使用场景
- 复杂的实体关系查询
- 需要变更跟踪的操作
- 事务性操作
- 数据库迁移管理
### 4.2 Dapper使用场景
- 高性能查询(大数据量)
- 复杂SQL查询
- 批量插入/更新
- 报表统计查询
- 存储过程调用
### 4.3 混合使用策略
```csharp
// EF Core - 复杂查询和实体管理
public async Task<Order> GetOrderWithDetailsAsync(Guid orderId)
{
return await _dbContext.Orders
.Include(o => o.OrderItems)
.Include(o => o.Customer)
.FirstOrDefaultAsync(o => o.Id == orderId);
}
// Dapper - 高性能统计查询
public async Task<OrderStatistics> GetOrderStatisticsAsync(DateTime startDate, DateTime endDate)
{
var sql = @"
SELECT
COUNT(*) as TotalOrders,
SUM(total_amount) as TotalAmount,
AVG(total_amount) as AvgAmount
FROM orders
WHERE created_at BETWEEN @StartDate AND @EndDate";
return await _connection.QueryFirstOrDefaultAsync<OrderStatistics>(sql,
new { StartDate = startDate, EndDate = endDate });
}
```
## 5. 缓存策略
### 5.1 缓存层次
- **L1缓存**内存缓存IMemoryCache- 进程内缓存
- **L2缓存**Redis缓存 - 分布式缓存
### 5.2 缓存场景
- 商家信息缓存30分钟
- 菜品信息缓存15分钟
- 用户会话缓存2小时
- 配置信息缓存1小时
- 热点数据缓存(动态过期)
### 5.3 缓存更新策略
- **Cache-Aside**:旁路缓存,先查缓存,未命中查数据库
- **Write-Through**:写入时同步更新缓存
- **Write-Behind**:异步更新缓存
## 6. 消息队列应用
### 6.1 异步任务
- 订单状态变更通知
- 短信/邮件发送
- 数据统计计算
- 日志持久化
### 6.2 事件驱动
- 订单创建事件
- 支付成功事件
- 配送状态变更事件
## 7. 安全设计
### 7.1 认证机制
- JWT Token认证
- Refresh Token刷新
- Token过期管理
### 7.2 授权机制
- 基于角色的访问控制RBAC
- 基于策略的授权
- 资源级权限控制
### 7.3 数据安全
- 敏感数据加密(密码、支付信息)
- HTTPS传输加密
- SQL注入防护
- XSS防护
### 7.4 接口安全
- 请求签名验证
- 接口限流Rate Limiting
- 防重放攻击
- CORS跨域配置