- 新增 GatewayAggregate 领域实体 (GwTenant, GwTenantRoute, GwServiceInstance) - 新增 IRouteStore, RouteStore, IInstanceStore, InstanceStore - 新增 IRouteManager, RouteManager - 合并 GatewayDbContext 到 PlatformDbContext - 统一 Extensions.AddPlatformCore 注册所有服务
3.8 KiB
3.8 KiB
架构
分析日期: 2026-02-28
模式概述
总体: 清洁架构 + DDD 启发的聚合模式
关键特性:
- 使用 ASP.NET Core Identity 模式的多租户平台基础设施
- 领域驱动设计(DDD)聚合用于业务实体
- Manager + Store 模式用于数据访问(ASP.NET Core Identity 风格)
- 通过 EF Core 的仓储抽象
- 多租户,TenantInfo 值对象嵌入在用户实体中
层级
领域层 (Fengling.Platform.Domain):
- 目的: 核心业务实体和领域逻辑
- 位置:
Fengling.Platform.Domain/AggregatesModel/ - 包含: 聚合、实体、值对象
- 依赖: Microsoft.AspNetCore.Identity(仅接口)
- 被使用: 基础设施层
基础设施层 (Fengling.Platform.Infrastructure):
- 目的: 数据持久化、外部集成、应用服务
- 位置:
Fengling.Platform.Infrastructure/ - 包含: DbContext、TenantStore、TenantManager、EF 配置、迁移
- 依赖: Fengling.Platform.Domain、EF Core、Identity
- 被使用: 消费应用(如 Console 等)
聚合
TenantAggregate:
- 实体:
Tenant- 表示租户组织 - 值对象:
TenantInfo- 租户上下文(TenantId、租户代码、租户名称) - 模式: 贫血模型(仅属性,无业务逻辑)
- 位置:
Fengling.Platform.Domain/AggregatesModel/TenantAggregate/
UserAggregate:
- 实体:
ApplicationUser- 继承IdentityUser<long> - 包含: RealName、TenantInfo、时间戳、软删除标志
- 位置:
Fengling.Platform.Domain/AggregatesModel/UserAggregate/
RoleAggregate:
- 实体:
ApplicationRole- 继承IdentityRole<long> - 包含: Description、TenantId、IsSystem、DisplayName、Permissions
- 位置:
Fengling.Platform.Domain/AggregatesModel/RoleAggregate/
数据流
租户解析流程:
- 用户认证 → 加载 ApplicationUser 及 TenantInfo
- TenantInfo(TenantId、租户代码、租户名称)嵌入用户实体
- 所有租户范围查询按 TenantInfo.TenantId 过滤
租户 CRUD 流程:
- Controller/Service 调用
ITenantManager TenantManager委托给ITenantStoreTenantStore通过PlatformDbContext执行 EF Core 操作- 更改持久化到 PostgreSQL 数据库
关键抽象
ITenantStore:
- 目的: Tenant 实体的数据访问操作
- 接口位置:
Fengling.Platform.Infrastructure/ITenantStore.cs - 实现:
TenantStore<TContext> - 模式: 自定义 Store 模式(ASP.NET Core Identity 风格)
ITenantManager:
- 目的: 租户操作的 应用服务
- 接口位置:
Fengling.Platform.Infrastructure/TenantManager.cs - 实现:
TenantManager - 委托给 ITenantStore
PlatformDbContext:
- 目的: EF Core 数据库上下文
- 位置:
Fengling.Platform.Infrastructure/PlatformDbContext.cs - 继承:
IdentityDbContext<ApplicationUser, ApplicationRole, long> - 包含: Tenant、AccessLog、AuditLog DbSets
入口点
依赖注入注册:
- 方法:
Extensions.AddPlatformCore<TContext>() - 位置:
Fengling.Platform.Infrastructure/Extensions.cs - 注册: DbContext、ITenantStore、ITenantManager
数据库上下文:
- 类型:
PlatformDbContext - 数据库: PostgreSQL(通过 Npgsql)
- 迁移位置:
Fengling.Platform.Infrastructure/Migrations/
错误处理
策略: 标准 ASP.NET Core Identity 结果模式
模式:
- CRUD 操作返回
IdentityResult(成功/失败) - 空检查返回
Task.FromResult<T>(null)表示未找到 - 当前未实现自定义异常处理层
横切关注点
日志: 此层未明确配置
验证: 未明确实现(依赖 ASP.NET Core Identity)
认证: 使用 ASP.NET Core Identity + OpenIddict(从迁移中可见)
多租户:
- 方法: 按 TenantInfo.TenantId 过滤
- TenantInfo 作为拥有实体嵌入 ApplicationUser
- 通过实体上的 IsDeleted 标志进行软删除
架构分析: 2026-02-28