chore: 更改文件夹结构

This commit is contained in:
2025-11-23 09:55:11 +08:00
parent ccadacaa9d
commit cd52131c34
13 changed files with 0 additions and 0 deletions

253
Document/02_技术架构.md Normal file
View File

@@ -0,0 +1,253 @@
# 外卖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跨域配置