XiHan Framework 处于预览阶段

查看获取方式
跳转到内容

框架概述 ​

本页说明 XiHan Framework 的设计原则、环层与依赖规则、一次调用的执行路径、命名约定、稳定性分级与环境要求,供做技术评估与写扩展的读者参考。

三层承诺 ​

框架按变化速度把代码分成三层,每层给出不同的兼容承诺:

层范围承诺
原语层XiHan.Framework.Primitives(Ring 0)只增不改,跨大版本不破坏;必须破坏时发布新包 ID Primitives.V2 并存
内核XiHan.Framework.Kernel(Ring 1)大版本内不破坏
子系统与其上抽象、实现、宿主、协议、插件、组合包(Ring 2–6)各自演进,通过同一套一致性套件即视为兼容

设计原则 ​

原则落在代码里的规则
内核克制内核只定义宿主、能力图谱、管道、诊断、安全原语、操作契约与插件抽象,不含任何子系统实现
装配显式服务在特性的 Configure 里显式注册;源生成器产出的登记代码也要显式调用(AddGeneratedOperations、AddGeneratedRepositories),不扫描程序集
依赖按能力声明清单按能力 ID 与接口版本声明依赖,内核求解后打印已解析图,缺失、循环、版本冲突、多候选都在启动期报错
边界刚、内部柔依赖方向、同环只经抽象包往来、抽象包不暴露第三方类型,全部由架构测试执行;包内实现可以随时重构
宿主落地管道不绑定 HTTP;ASP.NET Core、命令行、消息消费、作业与插件回调走同一条管道
规范先于实现公开契约先进 XiHan Spec 的 RFC,再写 ADR、代码与一致性向量
默认实现必须可用每个抽象配一个零外部依赖、容量有界、通过一致性套件的默认实现,只在没有显式 Provider 时被选中

环层与依赖规则 ​

text
Ring 6  组合包          Profiles.Minimal / Standard / Full
Ring 5  协议与插件      Protocols.* / Plugins.InProcess / OutOfProcess / Wasm
Ring 4  宿主            Hosting.AspNetCore / Hosting.CommandLine
Ring 3  实现            <领域>.InMemory、<领域>.Database、Redis、EntityFrameworkCore 等
Ring 2  抽象            Domain、<领域>.Abstractions
Ring 1  内核            Kernel
Ring 0  原语层          Primitives
工具链                  Kernel.Analyzers、Kernel.Generators、Persistence.Generators、
                        <领域>.Conformance、Testing、Cli
  1. 只能依赖更低的环;同环之间只能引用对方的抽象包(.Abstractions,以及纯契约的 Domain)。
  2. 原语层不引用任何包;内核与全部抽象包只允许 Microsoft.Extensions.* 抽象包,内核另加 System.Threading.RateLimiting。
  3. 抽象包不暴露第三方类型,Provider 不被任何抽象包引用。
  4. 宿主与协议包不含业务规则;插件不被任何正式包引用。
  5. 原语层与内核零反射;反射只允许出现在 Plugins.InProcess,并标注 RequiresDynamicCode。
  6. 工具链可以引用任何环。

规则由 framework/test/XiHan.Framework.Architecture.Tests 执行,违反即 CI 失败。

一次调用的路径 ​

text
HTTP 请求 / gRPC 调用 / MCP tools/call / 命令行 / 消息投递 / 作业触发 / 插件回调
   │  协议适配器或派发器构造 InvocationContext,把线上消息翻译成操作请求
   ▼
Ingress → Observe → Resilience → Authenticate → Tenant → Authorize
        → Validate → Idempotency → Transaction → Handle → Egress
   │  Handle 阶段执行操作,操作经子系统抽象访问 Provider
   ▼
Egress:Result 与 Error 翻译回协议(HTTP 为 RFC 9457 Problem Details,gRPC 为状态码与尾部元数据)

调用上下文 InvocationContext 携带取消令牌、截止时间、W3C Trace、已登记的 Baggage 键(租户、主体、关联 ID、幂等键、区域)、作用域对象袋与作用域服务。安全上下文(主体、租户)由 Authenticate 与 Tenant 阶段写入,之后不可变。

命名约定 ​

命名由 XiHan Spec 的术语表推出,架构测试校验:

对象规则示例
包 IDXiHan.Framework.<领域>[.<角色>],角色是 Abstractions、Conformance、Generators 或机制、技术名XiHan.Framework.Caching.Redis
命名空间等于包 ID,子命名空间最多一层XiHan.Framework.Caching.Abstractions.Locking
能力 ID<领域小写>.<能力>,引用时带接口版本caching.distributed@1
清单 IDxihan.<领域>.<名称>xihan.caching.redis
配置节XiHan:<领域>XiHan:Caching
错误码<领域大写>_<KIND>_<三位序号>PERSISTENCE_CONFLICT_001
操作 ID<资源复数>.<动词>orders.create
消息键<领域>.<资源>.<键>security.token.subject_missing

类型名不带 XiHan 前缀;Default、Core、Common、Manager、Helper 等词不进包名与领域名;默认实现按机制命名(InMemory、FileSystem、Database),默认是清单里的 role,不是包名。

核心机制速览 ​

机制一句话详见
特性与清单IFeature + Manifest,UseFeature<T>() 显式组合能力包与清单
生命周期九态状态机,探针直接映射应用状态生命周期与健康
执行管道十一个固定阶段,中间件按阶段插入执行管道
操作契约[Operation] + IOperation<TRequest, TResponse>,一份契约多协议操作契约
结果与错误Result / Error 代替异常表达可恢复失败,错误只带消息键结果与错误
本地化每种语言一个 JSON 文件,宿主按调用方区域翻译国际化
默认实现与 Provider抽象包 + 默认实现 + Provider,按能力选择包总览
一致性套件默认实现与 Provider 通过同一套行为测试测试与一致性套件

稳定性分级 ​

公开类型都带 [ApiLevel(Stability, <引入版本>)],公开面以各包的 PublicAPI.Shipped.txt 与 PublicAPI.Unshipped.txt 为准:

级别含义
Stable大版本内不破坏
Preview可能变更
Experimental可能移除,用于收集反馈(如 Plugins.Wasm、Caching.Remote)
Internal不对外承诺,分析器阻止外部引用
Deprecated将在下一个大版本移除

弃用按规范的流程进行:先标 Deprecated 并以 [Obsolete] 给出警告与迁移说明,至少保留两个小版本;下一个大版本前升级为编译错误,大版本时移除。

版本与兼容 ​

  • 全部包共享一条版本线。
  • 目标框架 net10.0;版本号遵循 SemVer 2.0。
  • 每个子系统的 Provider 接口单独版本化(persistence.relational@1),接口变更只加新版本并存。

环境要求 ​

项要求
SDK.NET 10 SDK;构建框架源码时使用仓库 global.json 锁定的 10.0.4xx 功能带
测试运行器Microsoft.Testing.Platform(由 global.json 启用,dotnet test 用 --solution 或 --project)
操作系统Windows、Linux、macOS;Wasm 插件宿主在 Windows 上要求宿主可执行项目设置 CETCompat=false
外部设施默认实现不需要;Provider 按各自包页的说明

下一步 ​

Released under The MIT License