254 lines
10 KiB
Markdown
254 lines
10 KiB
Markdown
# 外卖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:服务接口
|
||
- Validators:FluentValidation验证器
|
||
- Mappings:AutoMapper配置
|
||
- Commands/Queries:CQRS命令和查询
|
||
|
||
#### 2.2.3 领域层 (Domain Layer)
|
||
- **TakeoutSaaS.Domain**:领域模型
|
||
- Entities:实体类
|
||
- ValueObjects:值对象
|
||
- Enums:枚举
|
||
- Events:领域事件
|
||
- Interfaces:仓储接口
|
||
- Specifications:规约模式
|
||
|
||
#### 2.2.4 基础设施层 (Infrastructure Layer)
|
||
- **TakeoutSaaS.Infrastructure**:基础设施实现
|
||
- Data:数据访问
|
||
- EFCore:EF Core DbContext和配置
|
||
- Dapper:Dapper查询实现
|
||
- Repositories:仓储实现
|
||
- Migrations:数据库迁移
|
||
- Cache:Redis缓存实现
|
||
- MessageQueue:RabbitMQ实现
|
||
- 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跨域配置
|
||
|