# 架构管理系统 **本文档引用的文件** - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs) - [GameContext.cs](file://GFramework.Core/architecture/GameContext.cs) - [ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs) - [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs) - [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs) - [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs) - [IArchitectureConfiguration.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureConfiguration.cs) - [IArchitectureContext.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureContext.cs) - [IArchitectureServices.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureServices.cs) - [IArchitectureModule.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureModule.cs) - [IArchitectureLifecycle.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureLifecycle.cs) - [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs) - [README.md](file://GFramework.Core/architecture/README.md) - [SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs) - [AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本文件面向GFramework架构管理系统,围绕Architecture基类的设计与实现展开,系统性阐述其作为系统、模型、工具等组件的注册与管理中心,生命周期管理机制(阶段转换、初始化流程控制、销毁过程),组件注册体系(RegisterSystem、RegisterModel、RegisterUtility等),模块安装机制(InstallModule)与插件化架构,架构上下文(ArchitectureContext)与GameContext绑定机制,以及架构配置(IArchitectureConfiguration)与架构服务(IArchitectureServices)的使用范式。同时提供架构初始化的完整流程图与最佳实践建议。 ## 项目结构 GFramework.Core的architecture目录为核心实现区域,包含架构基类、上下文、服务、配置与常量等关键文件;Abstractions目录提供接口契约;Tests目录包含使用示例与测试架构;README.md提供使用说明与最佳实践。 ```mermaid graph TB subgraph "核心实现" A["Architecture.cs"] ACtx["ArchitectureContext.cs"] GCtx["GameContext.cs"] Conf["ArchitectureConfiguration.cs"] Svc["ArchitectureServices.cs"] Const["ArchitectureConstants.cs"] end subgraph "抽象接口" IA["IArchitecture.cs"] IConf["IArchitectureConfiguration.cs"] ICtx["IArchitectureContext.cs"] ISvc["IArchitectureServices.cs"] IM["IArchitectureModule.cs"] IL["IArchitectureLifecycle.cs"] AP["ArchitecturePhase.cs"] end subgraph "测试与文档" R["README.md"] STA["SyncTestArchitecture.cs"] ATA["AsyncTestArchitecture.cs"] end A --> IA ACtx --> ICtx Svc --> ISvc Conf --> IConf Const --> AP A --> Svc A --> ACtx A --> Const A --> Conf GCtx --> ACtx IM --> IL ``` 图表来源 - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L569) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L1-L225) - [GameContext.cs](file://GFramework.Core/architecture/GameContext.cs#L1-L111) - [ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L1-L35) - [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L1-L106) - [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L1-L54) - [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L1-L68) - [IArchitectureConfiguration.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureConfiguration.cs#L1-L19) - [IArchitectureContext.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureContext.cs#L1-L123) - [IArchitectureServices.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureServices.cs#L1-L40) - [IArchitectureModule.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureModule.cs#L1-L14) - [IArchitectureLifecycle.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureLifecycle.cs#L1-L16) - [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L1-L66) - [README.md](file://GFramework.Core/architecture/README.md#L1-L503) - [SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs#L1-L20) - [AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs#L1-L22) 章节来源 - [README.md](file://GFramework.Core/architecture/README.md#L1-L503) ## 核心组件 - Architecture基类:实现IArchitecture,负责生命周期管理、初始化流程控制、阶段转换、组件注册与销毁、模块安装与生命周期钩子管理。 - ArchitectureContext:实现IArchitectureContext,提供服务获取、命令/查询/事件执行、系统/模型/工具获取、环境访问等。 - GameContext:静态管理器,维护架构类型到架构上下文的绑定映射。 - ArchitectureServices:实现IArchitectureServices,提供IoC容器、事件总线、命令/查询总线等核心服务。 - ArchitectureConfiguration:实现IArchitectureConfiguration,提供日志与架构行为配置。 - ArchitectureConstants:定义阶段顺序与允许的阶段转换关系。 - 架构阶段枚举:ArchitecturePhase定义完整的生命周期阶段序列。 章节来源 - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L19-L89) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L13-L24) - [GameContext.cs](file://GFramework.Core/architecture/GameContext.cs#L6-L32) - [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L14-L61) - [ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L8-L35) - [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L6-L54) - [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66) ## 架构总览 下图展示Architecture基类与其依赖的上下文、服务、配置、常量之间的交互关系,以及模块安装与生命周期钩子的集成点。 ```mermaid classDiagram class Architecture { +Initialize() +InitializeAsync() +Destroy() +RegisterSystem(system) +RegisterModel(model) +RegisterUtility(utility) +InstallModule(module) +RegisterLifecycleHook(hook) +CurrentPhase +Context } class ArchitectureContext { +GetService() +GetSystem() +GetModel() +GetUtility() +SendCommand(...) +SendQuery(...) +SendEvent(...) +RegisterEvent(...) +GetEnvironment() } class GameContext { +Bind(architectureType, context) +Get() +TryGet(out) +GetByType(type) +GetFirstArchitectureContext() +Unbind(architectureType) +Clear() } class ArchitectureServices { +Container +EventBus +CommandBus +QueryBus +AsyncQueryBus +SetContext(context) +GetContext() } class ArchitectureConfiguration { +LoggerProperties +ArchitectureProperties } class ArchitectureConstants { +PhaseOrder +PhaseTransitions } class IArchitecture class IArchitectureContext class IArchitectureServices class IArchitectureConfiguration class IArchitectureModule class IArchitectureLifecycle class ArchitecturePhase Architecture ..|> IArchitecture ArchitectureContext ..|> IArchitectureContext ArchitectureServices ..|> IArchitectureServices ArchitectureConfiguration ..|> IArchitectureConfiguration Architecture --> ArchitectureContext : "使用" Architecture --> ArchitectureServices : "使用" Architecture --> ArchitectureConfiguration : "使用" Architecture --> ArchitectureConstants : "使用" Architecture --> GameContext : "绑定" IArchitectureModule <|-- IArchitectureLifecycle ArchitecturePhase <.. ArchitectureConstants ``` 图表来源 - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L89) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L41) - [GameContext.cs](file://GFramework.Core/architecture/GameContext.cs#L9-L111) - [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L17-L106) - [ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L12-L35) - [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54) - [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68) - [IArchitectureContext.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureContext.cs#L16-L123) - [IArchitectureServices.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureServices.cs#L12-L40) - [IArchitectureConfiguration.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureConfiguration.cs#L8-L19) - [IArchitectureModule.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureModule.cs#L7-L14) - [IArchitectureLifecycle.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureLifecycle.cs#L8-L16) - [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66) ## 详细组件分析 ### Architecture基类:生命周期与初始化流程 - 阶段管理 - EnterPhase负责阶段转换校验、状态更新、事件通知与阶段感知对象通知。 - ValidatePhaseTransition根据ArchitectureConstants的允许转换表与配置项StrictPhaseValidation进行校验。 - NotifyPhase与NotifyPhaseAwareObjects分别通知生命周期钩子与IArchitecturePhaseAware对象。 - 组件注册与生命周期 - RegisterLifecycleComponent统一处理IInitializable与IDisposable组件的登记与去重,保证初始化顺序与逆序销毁。 - RegisterSystem/RegisterModel/RegisterUtility在注册时设置上下文、登记生命周期并写入容器。 - 初始化流程 - Initialize/InitializeAsync封装InitializeInternalAsync,负责日志工厂设置、环境初始化、上下文创建与绑定、调用子类Init、组件分阶段初始化、容器冻结、进入Ready并发布事件。 - InitializeAllComponentsAsync按工具、模型、系统三阶段顺序初始化,支持同步与异步组件。 - 销毁流程 - Destroy进入Destroying阶段并发布事件,按逆序销毁IDisposable组件,最后进入Destroyed并发布事件。 - 模块安装 - InstallModule安装IArchitectureModule,注册生命周期钩子、登记模块实例、调用Install以完成模块内组件注册。 ```mermaid sequenceDiagram participant Client as "调用方" participant Arch as "Architecture" participant Ctx as "ArchitectureContext" participant Svc as "ArchitectureServices" participant Bus as "EventBus" participant C as "IoC容器" Client->>Arch : "Initialize()/InitializeAsync()" Arch->>Svc : "设置日志工厂/环境初始化" Arch->>Ctx : "创建上下文并绑定" Arch->>Arch : "调用子类Init()" Arch->>Arch : "InitializeAllComponentsAsync()" Arch->>C : "冻结容器" Arch->>Bus : "发送Ready事件" Arch-->>Client : "完成初始化" ``` 图表来源 - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L492-L566) - [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L46-L61) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L21-L54) 章节来源 - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L135-L396) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L400-L485) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L487-L566) ### ArchitectureContext:上下文服务与组件访问 - 服务缓存:通过私有字典缓存已解析的服务实例,减少容器查询开销。 - 组件获取:GetService/GetSystem/GetModel/GetUtility提供类型化服务解析。 - 命令/查询/事件:封装CommandBus、QueryBus、EventBus的发送与注册。 - 环境访问:GetEnvironment返回已注册的环境实例。 ```mermaid flowchart TD Start(["进入上下文方法"]) --> CheckCache["检查服务缓存"] CheckCache --> CacheHit{"命中缓存?"} CacheHit --> |是| ReturnCached["返回缓存实例"] CacheHit --> |否| Resolve["从容器解析服务"] Resolve --> Found{"解析成功?"} Found --> |是| Cache["写入缓存"] Cache --> ReturnResolved["返回解析实例"] Found --> |否| ThrowErr["抛出未注册异常"] ReturnCached --> End(["结束"]) ReturnResolved --> End ThrowErr --> End ``` 图表来源 - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L26-L41) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L75-L107) 章节来源 - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L225) ### GameContext:架构上下文绑定与管理 - 绑定:Bind将架构类型与上下文实例建立唯一映射,防止重复绑定。 - 获取:Get/Get/TryGet提供强类型与泛型安全的上下文访问。 - 字典:使用并发字典保证多线程场景下的安全性。 - 清理:Unbind/Clear支持解除绑定与清空。 ```mermaid flowchart TD A["Bind(architectureType, context)"] --> Check["尝试添加键值对"] Check --> Added{"添加成功?"} Added --> |是| Done["绑定完成"] Added --> |否| ThrowDup["抛出重复绑定异常"] B["Get()"] --> Lookup["按类型查找"] Lookup --> Found{"找到?"} Found --> |是| Return["返回上下文实例"] Found --> |否| ThrowNotFound["抛出未找到异常"] ``` 图表来源 - [GameContext.cs](file://GFramework.Core/architecture/GameContext.cs#L27-L32) - [GameContext.cs](file://GFramework.Core/architecture/GameContext.cs#L66-L73) 章节来源 - [GameContext.cs](file://GFramework.Core/architecture/GameContext.cs#L9-L111) ### ArchitectureServices:核心服务聚合 - 容器与总线:提供IoC容器、事件总线、命令总线、查询总线与异步查询总线。 - 上下文设置:SetContext将架构上下文传递给容器与自身,确保服务可用。 - 注册:在构造函数中将核心服务注册到容器,供上下文解析。 章节来源 - [ArchitectureServices.cs](file://GFramework.Core/architecture/ArchitectureServices.cs#L17-L106) ### ArchitectureConfiguration:配置与策略 - 日志配置:LoggerProperties包含日志工厂提供程序与最小日志级别。 - 架构选项:ArchitectureProperties包含AllowLateRegistration与StrictPhaseValidation等策略开关。 章节来源 - [ArchitectureConfiguration.cs](file://GFramework.Core/architecture/ArchitectureConfiguration.cs#L12-L35) ### ArchitectureConstants:阶段与转换规则 - 阶段顺序:PhaseOrder定义线性阶段序列。 - 转换规则:PhaseTransitions定义允许的阶段转换集合,支持从任意阶段转入FailedInitialization。 章节来源 - [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L9-L54) ### 接口契约与模块化 - IArchitecture:定义初始化、销毁、组件注册、模块安装与生命周期钩子注册。 - IArchitectureContext:定义服务获取、命令/查询/事件执行与环境访问。 - IArchitectureServices:定义容器与核心总线服务。 - IArchitectureModule:模块安装接口,继承生命周期与阶段感知。 - IArchitectureLifecycle:阶段回调接口。 - ArchitecturePhase:阶段枚举。 章节来源 - [IArchitecture.cs](file://GFramework.Core.Abstractions/architecture/IArchitecture.cs#L11-L68) - [IArchitectureContext.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureContext.cs#L16-L123) - [IArchitectureServices.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureServices.cs#L12-L40) - [IArchitectureModule.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureModule.cs#L7-L14) - [IArchitectureLifecycle.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureLifecycle.cs#L8-L16) - [ArchitecturePhase.cs](file://GFramework.Core.Abstractions/enums/ArchitecturePhase.cs#L10-L66) ### 测试架构示例:使用模式 - 同步测试架构:在Init中注册同步模型与系统,演示标准注册流程。 - 异步测试架构:在Init中注册异步模型与系统,演示异步初始化流程。 章节来源 - [SyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/SyncTestArchitecture.cs#L9-L20) - [AsyncTestArchitecture.cs](file://GFramework.Core.Tests/architecture/AsyncTestArchitecture.cs#L9-L22) ## 依赖关系分析 - Architecture对IArchitectureConfiguration、IArchitectureServices、IArchitectureContext、ArchitectureConstants、ArchitecturePhase的依赖清晰且稳定。 - ArchitectureContext依赖IArchitectureServices与IArchitectureContext接口,通过容器解析核心服务。 - GameContext独立于架构实现,仅持有IArchitectureContext实例,提供全局绑定管理。 - 模块与生命周期钩子通过IArchitectureModule与IArchitectureLifecycle接入,增强扩展性。 ```mermaid graph LR Arch["Architecture"] --> Conf["IArchitectureConfiguration"] Arch --> Svc["IArchitectureServices"] Arch --> Ctx["IArchitectureContext"] Arch --> Const["ArchitectureConstants"] Arch --> Phase["ArchitecturePhase"] Ctx --> Svc GCtx["GameContext"] --> Ctx Mod["IArchitectureModule"] --> Life["IArchitectureLifecycle"] ``` 图表来源 - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L89) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L16-L41) - [GameContext.cs](file://GFramework.Core/architecture/GameContext.cs#L9-L32) - [IArchitectureModule.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureModule.cs#L7-L14) - [IArchitectureLifecycle.cs](file://GFramework.Core.Abstractions/architecture/IArchitectureLifecycle.cs#L8-L16) 章节来源 - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L1-L569) - [ArchitectureContext.cs](file://GFramework.Core/architecture/ArchitectureContext.cs#L1-L225) - [GameContext.cs](file://GFramework.Core/architecture/GameContext.cs#L1-L111) ## 性能考虑 - 服务缓存:ArchitectureContext对服务解析结果进行缓存,降低容器查询成本。 - 去重与顺序:Architecture使用HashSet与List双重结构管理待初始化与可销毁组件,确保原子去重与确定性顺序。 - 异步初始化:支持IAsyncInitializable与IAsyncQuery,充分利用异步I/O提升初始化吞吐。 - 容器冻结:初始化完成后冻结IoC容器,避免后续注册带来的性能与一致性问题。 ## 故障排查指南 - 初始化失败 - 现象:Initialize/InitializeAsync抛出异常后进入FailedInitialization阶段并发布失败事件。 - 排查:检查Init中注册的组件是否正确实现接口、依赖是否已注册、日志级别是否足够详细。 - 阶段转换异常 - 现象:ValidatePhaseTransition抛出非法转换异常。 - 排查:确认当前阶段与允许转换表,必要时调整StrictPhaseValidation策略。 - 组件注册时机 - 现象:在Ready阶段后注册组件抛出异常。 - 排查:通过AllowLateRegistration策略控制注册窗口,或在Init中集中注册。 - 销毁异常 - 现象:销毁过程中某个组件抛出异常但不影响其他组件。 - 排查:捕获异常并记录日志,确保资源清理的幂等性。 章节来源 - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L164-L183) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L494-L504) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L377-L387) ## 结论 Architecture基类通过明确的阶段化生命周期、严格的注册时机控制、统一的组件注册与销毁机制,以及模块化与上下文绑定设计,构建了高内聚、低耦合、可扩展的架构管理体系。结合ArchitectureContext与GameContext提供的全局绑定与服务访问,开发者可以以一致的方式组织系统、模型与工具组件,并通过IArchitectureConfiguration与IArchitectureServices灵活定制行为与服务。 ## 附录 ### 架构初始化完整流程图 ```mermaid flowchart TD Start(["开始 Initialize/InitializeAsync"]) --> Setup["设置日志工厂/初始化环境"] Setup --> Ctx["创建并绑定架构上下文"] Ctx --> UserInit["调用子类 Init()"] UserInit --> CompInit["InitializeAllComponentsAsync()"] CompInit --> PhaseU1["BeforeUtilityInit"] PhaseU1 --> UInit["初始化工具组件"] UInit --> PhaseU2["AfterUtilityInit"] PhaseU2 --> PhaseM1["BeforeModelInit"] PhaseM1 --> MInit["初始化模型组件"] MInit --> PhaseM2["AfterModelInit"] PhaseM2 --> PhaseS1["BeforeSystemInit"] PhaseS1 --> SInit["初始化系统组件"] SInit --> PhaseS2["AfterSystemInit"] PhaseS2 --> Freeze["冻结IoC容器"] Freeze --> Ready["进入 Ready 阶段并发布事件"] Ready --> End(["初始化完成"]) Fail(["初始化异常"]) --> FailPhase["进入 FailedInitialization 并发布事件"] Fail --> End ``` 图表来源 - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L531-L566) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L264-L330) - [ArchitectureConstants.cs](file://GFramework.Core/architecture/ArchitectureConstants.cs#L17-L29) ### 最佳实践建议 - 在Init中集中注册组件,避免在Ready后注册导致异常。 - 合理划分Utility/Model/System职责边界,遵循“数据/状态”、“业务逻辑/规则”、“无状态工具”的分层原则。 - 使用模块化(InstallModule)扩展架构功能,保持核心简洁。 - 通过IArchitectureConfiguration定制日志与阶段验证策略,满足不同部署需求。 - 使用ArchitectureContext进行服务访问,避免直接依赖具体实现。 - 对可能耗时的初始化使用异步组件,提升整体启动性能。 章节来源 - [README.md](file://GFramework.Core/architecture/README.md#L476-L487) - [Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L492-L566)