# 外卖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跨域配置

