跳到主要内容

系统架构总览

FreeKitModules 的主形态是一个模块化单体:CmsKit、Identity、Member 和 Platform 在同一进程中组合,但各自保留业务边界。HTTP 接入层与核心业务程序集分开,使 API、调度和消息处理宿主可以按职责加载不同能力。

运行时边界

auth/basic/cg/ 有自己的解决方案与宿主,不属于 FreeKit.Host 进程内模块。它们与主模块共享部分 FreeKit 包,但部署边界独立。

模块项目的两层拆分

项目类型放置内容可被哪些宿主引用
FreeKit.<Module>Domain、Application、Contracts、Runtime、持久化配置API、Job、Message
FreeKit.<Module>.HttpApiControllers、SignalR Hubs、HTTP 专属模块注册主 API Host

当前采用这一拆分的模块包括 CmsKit、Identity、Member 和 Platform。依赖方向必须是 *.HttpApi → 核心项目,核心项目不能反向引用 HttpApi。

主 API 的组合过程

src/Services/Host/FreeKit.Host/Program.cs 同时完成两件事:

  1. 显式注册 CmsKit、Identity、Platform、Member 的核心 ModuleStartup,让业务服务和领域能力进入 DI。
  2. 基于 E.Modules 构造 hostModules,把四个同名模块键替换为对应 *HttpApiModuleStartup;随后调用 UseFreeKit 注册 Controller 程序集,并通过 extraAssemblies 把核心程序集加入 Autofac 扫描。

src/Services/Host/FreeKit.DI/E.cs 仍是 Job、Message 等后台宿主的核心模块映射。只从该字典删除模块,会影响这些后台宿主;主 API 还存在显式核心注册和 HttpApi 映射,因此调整模块组合时必须同时检查 E.csFreeKit.Host/Program.cs

请求链路

  • Controller 只负责 HTTP 契约、参数绑定和转发。
  • Application Service 编排用例,并在这里处理权限、资源所有权和事务边界。
  • Domain Manager 封装领域规则或复杂数据操作。
  • Application 与 Controller 不新增 IFreeSql 直接依赖;数据访问通过 IAuditBaseRepository<T> 或 Domain Manager。
  • 控制器继承 FreeKitController 后默认要求认证,匿名端点必须显式标注 [AllowAnonymous]

共享构建块

src/BuildingBlocks/ 为所有业务模块提供仓库基础设施:

项目职责
IGeekFan.FreeKit.InfrastructureController/Application 基类、权限、本地化、中间件、日志与 CAP 集成
IGeekFan.FreeKit.WebHost 组合、Autofac 扫描、Web 配置、OpenTelemetry
IGeekFan.FreeKit.Auth.Client独立授权服务的客户端接入
IGeekFan.FreeKit.CLI命令行与脚手架能力

这些是仓库内部 ProjectReference,不要在文档或业务代码中把它们当成可独立安装的 NuGet 包。

扩展一个模块时

  1. 先确定业务边界和聚合,不要按数据库表机械拆模块。
  2. 将实体、Manager、Application Service 和 Contracts 放入核心项目。
  3. 需要 HTTP 时创建/使用 *.HttpApi 项目放置 Controller。
  4. 分别实现核心与 HttpApi 的 IModuleStartup
  5. 检查 FreeKit.DI/E.csFreeKit.Host/Program.cs、项目引用和解决方案条目。
  6. 增加 Domain/Application/API/Architecture 对应层级的测试。

完整流程见创建业务模块

相关源码

  • src/Services/Host/FreeKit.Host/Program.cs
  • src/Services/Host/FreeKit.DI/E.cs
  • src/BuildingBlocks/IGeekFan.FreeKit.Web/DI/WebApplicationBuilderExtensions.cs
  • src/FreeKit/src/IGeekFan.FreeKit.Modularity/ModuleServiceCollection.cs
  • src/FreeKit/src/IGeekFan.FreeKit.Modularity/ModuleApplicationBuilderExtensions.cs

相关文档