Skip to content
bitzorcas
中EN

Concept

ADR 0203: 物理目录结构 Framework + Modules

将代码库顶级目录重构为 Framework、Platform 与 Modules 三层物理隔离体系,明确底座、平台能力与业务模块边界。

Last updated

ADR 0203: 物理目录结构 Framework + Modules

状态

已采纳 (Accepted)

日期

2026-06-30

背景

BitzOrcasVNext 的 src/ 目录早期使用 BuildingBlocks/ + Platform/ 扁平结构。随着模块化单体演进和业务模块增长,该结构存在两个问题:

  1. 语义模糊:BuildingBlocks 名称不直接表达“框架底座”语义,Platform 不区分系统级平台与业务模块。
  2. 防腐隔离不足:框架内核(Domain/Application/Infrastructure/SG)与默认 Platform 能力在同一层,后续模块更新可能耦合框架底座。

ABP 等成熟框架实践表明:框架底座与业务模块应在物理目录层面明确分离,避免代码演进时的耦合。

决策

将 src/ 顶级目录重组为 Framework/ + Platform/ + Modules/ 物理分层结构:

1. BuildingBlocks → Framework

src/Framework/ 存放纯技术框架底座(零业务依赖),包含:

子分组项目职责
核心Domain / Application / Modularity领域模型、应用管线、模块治理
SourceGeneratorsDI.Attributes / DI.SourceGenerator / Endpoint.SourceGenerator编译期零反射 DI 与端点发现(ADR 0103)
CodeGenerationCodeGeneration.Abstractions / CodeGeneration.Scriban模版代码生成与输入审计
Persistence.MetadataPersistence.Metadata / Persistence.Metadata.Generatorprovider-neutral metadata 与 ORM Fluent 配置生成
InfrastructureInfrastructure / Infrastructure.SqlSugar / EfCore / Dapper / Storage.S3CompatibleORM 适配器与持久化
WorkflowWorkflow.Abstractions / Engine / Persistence / SqlSugar / EfCore / Dapper自研轻量级高性能工作流引擎

2. Platform → src/Platform

src/Platform/ 是模板默认 Platform 的正式位置,用于存放模板内置平台能力的 Contracts / Domain / Application / Infrastructure / Endpoints 项目。Platform 与 src/Modules/** 同级,物理上区分模板资产与采用模板后的业务模块。

位置职责状态
src/Platform/**默认 Platform 的目标结构;承载 36 个模板内置平台能力正式路径
src/Modules/<Category>/<Module>/**采用模板后的业务系统自建业务模块业务路径
src/Modules/Sandbox/**模板演示与架构测试样例示例路径

未来采用模板的业务系统应在 /src/Modules/{BusinessModule}/ 创建自己的模块分组,不得把定制代码塞回默认 Platform 目录。

3. 不变的约定

  • Assembly 名不变:所有 .csproj 的 <AssemblyName> 保持原值(如 BitzOrcas.Platform.Application),架构测试的 Assembly.Load 不受影响。
  • 命名空间不变:所有 C# 源代码的 namespace 声明保持不变。
  • Hosts/Tooling 不变:src/Hosts/ 和 src/Tooling/ 保持原位。

限制与约束

  1. 项目名(.csproj 文件名)不改,仅改物理目录路径。
  2. 新建默认 Platform 能力应使用 src/Platform/<Capability>/。
  3. 新增业务模块时,应在 Modules/ 下创建独立子目录(如 Modules/Business/Cases/),与 Platform 系统级模块物理隔离。

关联文档

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%