# 外卖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 GetOrderWithDetailsAsync(Guid orderId) { return await _dbContext.Orders .Include(o => o.OrderItems) .Include(o => o.Customer) .FirstOrDefaultAsync(o => o.Id == orderId); } // Dapper - 高性能统计查询 public async Task 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(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跨域配置