# DDD集成模式 **本文引用的文件** - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs) - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs) - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs) - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs) - [GFramework.Core/command/CommandBus.cs](file://GFramework.Core/command/CommandBus.cs) - [GFramework.Core/query/QueryBus.cs](file://GFramework.Core/query/QueryBus.cs) - [GFramework.Core/state/StateMachine.cs](file://GFramework.Core/state/StateMachine.cs) - [GFramework.Core.Abstractions/model/IModel.cs](file://GFramework.Core.Abstractions/model/IModel.cs) - [GFramework.Core.Abstractions/system/ISystem.cs](file://GFramework.Core.Abstractions/system/ISystem.cs) - [GFramework.Core.Abstractions/events/IEventBus.cs](file://GFramework.Core.Abstractions/events/IEventBus.cs) - [GFramework.Core.Abstractions/command/ICommandBus.cs](file://GFramework.Core.Abstractions/command/ICommandBus.cs) - [GFramework.Core.Abstractions/query/IQueryBus.cs](file://GFramework.Core.Abstractions/query/IQueryBus.cs) - [GFramework.Game/setting/SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs) - [GFramework.Game/setting/SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖分析](#依赖分析) 7. [性能考量](#性能考量) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本指南面向希望在GFramework中落地领域驱动设计(DDD)的开发者,系统讲解如何将DDD的关键概念与GFramework现有的架构组件(模型、系统、事件总线、命令/查询总线、依赖注入容器、状态机等)有效结合。内容覆盖: - 实体与模型的映射:以模型作为领域模型的承载者,通过系统与事件总线协同表达领域行为 - 领域事件与事件总线:利用事件总线发布/订阅领域事件,解耦跨聚合边界的行为 - 命令查询职责分离(CQRS):命令总线负责变更,查询总线负责读取,二者在架构中清晰分离 - 依赖注入与领域服务:通过IoC容器注册与解析“领域服务”,保证依赖倒置与可测试性 - 典型DDD模式在GFramework中的实现:仓储、工厂、策略等模式的落地路径 - 最佳实践与常见陷阱:如何避免过度建模、如何平衡领域复杂度与性能 ## 项目结构 GFramework采用分层+模块化的组织方式,核心层提供架构、模型、系统、事件、命令/查询、状态机、IoC等通用能力;游戏层(Game)在此之上提供具体业务场景(如设置系统)的实现。 ```mermaid graph TB subgraph "核心层(Core)" A["架构(Architecture)"] M["模型(AbstractModel)"] S["系统(AbstractSystem)"] E["事件总线(EventBus)"] C["命令总线(CommandBus)"] Q["查询总线(QueryBus)"] ST["状态机(StateMachine)"] IOC["IoC容器(IocContainer)"] end subgraph "抽象层(Core.Abstractions)" AM["IModel 接口"] AS["ISystem 接口"] AE["IEventBus 接口"] AC["ICommandBus 接口"] AQ["IQueryBus 接口"] end subgraph "游戏层(Game)" GM["设置模型(SettingsModel)"] GS["设置系统(SettingsSystem)"] end A --> M A --> S A --> E A --> C A --> Q A --> ST A --> IOC M --> AM S --> AS E --> AE C --> AC Q --> AQ GS --> GM GS --> E GS --> IOC ``` 图表来源 - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569) - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34) - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L13-L62) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) - [GFramework.Core/command/CommandBus.cs](file://GFramework.Core/command/CommandBus.cs#L9-L62) - [GFramework.Core/query/QueryBus.cs](file://GFramework.Core/query/QueryBus.cs#L8-L23) - [GFramework.Core/state/StateMachine.cs](file://GFramework.Core/state/StateMachine.cs#L8-L276) - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373) - [GFramework.Core.Abstractions/model/IModel.cs](file://GFramework.Core.Abstractions/model/IModel.cs#L10-L10) - [GFramework.Core.Abstractions/system/ISystem.cs](file://GFramework.Core.Abstractions/system/ISystem.cs#L11-L11) - [GFramework.Core.Abstractions/events/IEventBus.cs](file://GFramework.Core.Abstractions/events/IEventBus.cs#L8-L37) - [GFramework.Core.Abstractions/command/ICommandBus.cs](file://GFramework.Core.Abstractions/command/ICommandBus.cs#L8-L37) - [GFramework.Core.Abstractions/query/IQueryBus.cs](file://GFramework.Core.Abstractions/query/IQueryBus.cs#L6-L15) - [GFramework.Game/setting/SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs#L9-L103) - [GFramework.Game/setting/SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L11-L99) 章节来源 - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569) - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34) - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L13-L62) - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) - [GFramework.Core/command/CommandBus.cs](file://GFramework.Core/command/CommandBus.cs#L9-L62) - [GFramework.Core/query/QueryBus.cs](file://GFramework.Core/query/QueryBus.cs#L8-L23) - [GFramework.Core/state/StateMachine.cs](file://GFramework.Core/state/StateMachine.cs#L8-L276) - [GFramework.Core.Abstractions/model/IModel.cs](file://GFramework.Core.Abstractions/model/IModel.cs#L10-L10) - [GFramework.Core.Abstractions/system/ISystem.cs](file://GFramework.Core.Abstractions/system/ISystem.cs#L11-L11) - [GFramework.Core.Abstractions/events/IEventBus.cs](file://GFramework.Core.Abstractions/events/IEventBus.cs#L8-L37) - [GFramework.Core.Abstractions/command/ICommandBus.cs](file://GFramework.Core.Abstractions/command/ICommandBus.cs#L8-L37) - [GFramework.Core.Abstractions/query/IQueryBus.cs](file://GFramework.Core.Abstractions/query/IQueryBus.cs#L6-L15) - [GFramework.Game/setting/SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs#L9-L103) - [GFramework.Game/setting/SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L11-L99) ## 核心组件 - 架构(Architecture):统一管理模块、生命周期、阶段转换、组件注册与初始化、销毁流程,提供事件总线与IoC容器的接入点 - 模型(AbstractModel):领域模型的承载者,实现初始化与架构阶段感知 - 系统(AbstractSystem):领域服务与应用服务的承载者,负责初始化/销毁与日志 - 事件总线(EventBus):基于类型的事件发布/订阅,支持Send/Register/UnRegister - 命令总线(CommandBus):同步/异步命令执行入口,支持无返回值与有返回值命令 - 查询总线(QueryBus):同步查询执行入口,返回查询结果 - IoC容器(IocContainer):注册/解析对象,支持单例、多实现、冻结保护 - 状态机(StateMachine):状态注册、切换、历史管理与事件回调 章节来源 - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569) - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34) - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L13-L62) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) - [GFramework.Core/command/CommandBus.cs](file://GFramework.Core/command/CommandBus.cs#L9-L62) - [GFramework.Core/query/QueryBus.cs](file://GFramework.Core/query/QueryBus.cs#L8-L23) - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373) - [GFramework.Core/state/StateMachine.cs](file://GFramework.Core/state/StateMachine.cs#L8-L276) ## 架构总览 下图展示了DDD相关能力在GFramework中的集成位置与交互关系。 ```mermaid graph TB subgraph "领域层" D1["实体/值对象
承载于模型/系统"] D2["领域服务策略/工厂
承载于系统"] D3["领域事件"] end subgraph "应用层" A1["命令总线"] A2["查询总线"] A3["事件总线"] end subgraph "基础设施层" I1["IoC容器"] I2["架构(Architecture)"] I3["状态机(StateMachine)"] end D1 --> A1 D1 --> A2 D1 --> A3 D2 --> A1 D2 --> A3 D3 --> A3 A1 --> I1 A2 --> I1 A3 --> I1 I2 --> I1 I2 --> A3 I2 --> I3 ``` 图表来源 - [GFramework.Core/command/CommandBus.cs](file://GFramework.Core/command/CommandBus.cs#L9-L62) - [GFramework.Core/query/QueryBus.cs](file://GFramework.Core/query/QueryBus.cs#L8-L23) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373) - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569) - [GFramework.Core/state/StateMachine.cs](file://GFramework.Core/state/StateMachine.cs#L8-L276) ## 详细组件分析 ### 实体与模型的映射 - 模型作为领域模型的载体,实现初始化与架构阶段感知,适合承载不变的领域状态与内聚的领域行为 - 系统作为领域服务与应用服务的载体,负责跨模型的协调与外部交互 - 在GFramework中,模型与系统均继承上下文感知基类,可在架构初始化阶段获得上下文并参与生命周期管理 ```mermaid classDiagram class IModel { <> } class ISystem { <> } class AbstractModel { +Init() +OnArchitecturePhase(phase) #OnInit() } class AbstractSystem { +Init() +Destroy() +OnArchitecturePhase(phase) #OnInit() #OnDestroy() } IModel <|.. AbstractModel ISystem <|.. AbstractSystem ``` 图表来源 - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34) - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L13-L62) - [GFramework.Core.Abstractions/model/IModel.cs](file://GFramework.Core.Abstractions/model/IModel.cs#L10-L10) - [GFramework.Core.Abstractions/system/ISystem.cs](file://GFramework.Core.Abstractions/system/ISystem.cs#L11-L11) 章节来源 - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34) - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L13-L62) - [GFramework.Core.Abstractions/model/IModel.cs](file://GFramework.Core.Abstractions/model/IModel.cs#L10-L10) - [GFramework.Core.Abstractions/system/ISystem.cs](file://GFramework.Core.Abstractions/system/ISystem.cs#L11-L11) ### 领域事件与事件总线的集成 - 事件总线提供基于类型的事件发送与订阅,适合发布/订阅跨聚合的领域事件 - 在系统中发布领域事件,其他系统或模型通过订阅事件响应领域变化,实现松耦合 ```mermaid sequenceDiagram participant Sys as "系统(AbstractSystem)" participant Bus as "事件总线(EventBus)" participant Model as "模型(AbstractModel)" Sys->>Sys : "执行领域动作" Sys->>Bus : "Send(领域事件)" Bus-->>Sys : "触发回调" Bus-->>Model : "触发订阅回调" Model-->>Sys : "响应事件(可选)" ``` 图表来源 - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L13-L62) - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34) 章节来源 - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L13-L62) - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34) ### 命令查询与CQRS的配合 - 命令总线负责执行变更型操作,查询总线负责读取型操作 - 在应用层编排:命令总线接收命令并委派给系统/模型;查询总线直接执行查询并返回结果 - 通过事件总线传播命令执行后的领域事件,实现读写分离与最终一致性 ```mermaid sequenceDiagram participant App as "应用层" participant Cmd as "命令总线(CommandBus)" participant Qry as "查询总线(QueryBus)" participant Sys as "系统(AbstractSystem)" participant Mod as "模型(AbstractModel)" participant Ev as "事件总线(EventBus)" App->>Cmd : "Send(命令)" Cmd->>Sys : "Execute()" Sys->>Mod : "更新领域状态" Sys->>Ev : "Send(领域事件)" Ev-->>App : "通知订阅方" App->>Qry : "Send(查询)" Qry->>Mod : "Do()" Mod-->>Qry : "返回结果" Qry-->>App : "返回查询结果" ``` 图表来源 - [GFramework.Core/command/CommandBus.cs](file://GFramework.Core/command/CommandBus.cs#L9-L62) - [GFramework.Core/query/QueryBus.cs](file://GFramework.Core/query/QueryBus.cs#L8-L23) - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L13-L62) - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) 章节来源 - [GFramework.Core/command/CommandBus.cs](file://GFramework.Core/command/CommandBus.cs#L9-L62) - [GFramework.Core/query/QueryBus.cs](file://GFramework.Core/query/QueryBus.cs#L8-L23) - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L13-L62) - [GFramework.Core/model/AbstractModel.cs](file://GFramework.Core/model/AbstractModel.cs#L11-L34) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) ### 依赖注入与领域服务的结合 - IoC容器提供注册/解析能力,支持多实现与冻结保护,确保架构初始化完成后依赖关系稳定 - 领域服务(如策略、工厂)可作为系统或独立服务注册到容器,通过系统或模型在运行期解析使用 ```mermaid flowchart TD Start(["启动架构"]) --> Reg["注册系统/模型/服务到IoC容器"] Reg --> Freeze["冻结容器(禁止后续注册)"] Freeze --> Resolve["系统/模型解析所需服务"] Resolve --> Use["执行领域逻辑"] Use --> End(["完成"]) ``` 图表来源 - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373) - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L531-L566) 章节来源 - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373) - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L531-L566) ### 典型DDD模式在GFramework中的实现 #### 仓储模式 - 通过系统封装对模型的访问与持久化策略,系统作为仓储的外观 - 示例:设置系统对设置模型进行应用与批量应用,体现仓储的聚合访问与事务语义 ```mermaid sequenceDiagram participant Sys as "设置系统(SettingsSystem)" participant Model as "设置模型(SettingsModel)" participant Bus as "事件总线(EventBus)" Sys->>Model : "All()/TryGet()" Sys->>Bus : "Send(SettingsApplying/SettingsApplied)" Sys-->>Sys : "Apply()/ApplyAll()" ``` 图表来源 - [GFramework.Game/setting/SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L11-L99) - [GFramework.Game/setting/SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs#L9-L103) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) 章节来源 - [GFramework.Game/setting/SettingsSystem.cs](file://GFramework.Game/setting/SettingsSystem.cs#L11-L99) - [GFramework.Game/setting/SettingsModel.cs](file://GFramework.Game/setting/SettingsModel.cs#L9-L103) #### 工厂模式 - 通过系统或独立工厂类负责创建复杂实体/值对象,避免模型承担过多创建逻辑 - 工厂可注册为服务,由系统在运行期解析并使用 章节来源 - [GFramework.Core/system/AbstractSystem.cs](file://GFramework.Core/system/AbstractSystem.cs#L13-L62) - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373) #### 策略模式 - 将可变的领域算法封装为策略对象,注册到IoC容器,系统在运行期根据上下文选择合适策略 - 策略对象可通过事件总线对外发布策略执行结果或副作用 章节来源 - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) ### 概念性总览 以下为概念性工作流,帮助理解DDD在GFramework中的落地思路(非特定代码映射)。 ```mermaid flowchart TD DDD["领域建模"] --> App["应用编排"] App --> Cmd["命令总线"] App --> Qry["查询总线"] App --> Ev["事件总线"] Cmd --> Sys["系统/领域服务"] Qry --> Model["模型/仓储"] Ev --> Model Sys --> Model Sys --> IOC["IoC容器"] Model --> IOC ``` ## 依赖分析 - 组件耦合与内聚:模型与系统分别承担领域状态与领域行为,通过事件总线与IoC容器解耦 - 直接与间接依赖:命令/查询总线依赖系统/模型;事件总线被系统/模型广泛使用;IoC容器贯穿注册与解析 - 外部依赖与集成点:事件总线提供统一的发布/订阅接口;命令/查询总线提供统一的执行接口;IoC容器提供依赖解析 ```mermaid graph LR CMD["命令总线"] --> SYS["系统"] QRY["查询总线"] --> MOD["模型"] EV["事件总线"] --> SYS EV --> MOD IOC["IoC容器"] --> SYS IOC --> MOD ARCH["架构"] --> IOC ARCH --> EV ``` 图表来源 - [GFramework.Core/command/CommandBus.cs](file://GFramework.Core/command/CommandBus.cs#L9-L62) - [GFramework.Core/query/QueryBus.cs](file://GFramework.Core/query/QueryBus.cs#L8-L23) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373) - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569) 章节来源 - [GFramework.Core/command/CommandBus.cs](file://GFramework.Core/command/CommandBus.cs#L9-L62) - [GFramework.Core/query/QueryBus.cs](file://GFramework.Core/query/QueryBus.cs#L8-L23) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L12-L373) - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L23-L569) ## 性能考量 - 初始化阶段与冻结:架构初始化完成后冻结IoC容器,避免运行期频繁注册带来的开销与竞争 - 事件总线:事件触发为同步路径,应避免在事件回调中执行耗时操作;必要时将重活交给系统或后台线程 - 命令/查询总线:命令/查询执行应尽量轻量,复杂逻辑下沉到系统;避免在总线层做过多分支判断 - 状态机:状态切换涉及历史记录维护,注意历史容量上限,避免内存膨胀 - 并发与锁:IoC容器内部使用读写锁保护注册/解析,避免在持有锁期间执行阻塞操作 ## 故障排查指南 - 初始化失败:架构初始化失败会进入失败阶段并发送失败事件,检查初始化顺序与依赖关系 - 注册时机:在架构Ready之后再注册组件会抛出异常,需在Init中完成注册 - 容器冻结:冻结后无法继续注册,确保在初始化阶段完成所有注册 - 事件未触发:确认事件类型正确、注册回调与事件发送匹配,检查事件总线生命周期 - 命令/查询异常:命令/查询执行异常会向上抛出,需在系统中捕获并处理 章节来源 - [GFramework.Core/architecture/Architecture.cs](file://GFramework.Core/architecture/Architecture.cs#L492-L566) - [GFramework.Core/ioc/IocContainer.cs](file://GFramework.Core/ioc/IocContainer.cs#L357-L370) - [GFramework.Core/events/EventBus.cs](file://GFramework.Core/events/EventBus.cs#L8-L55) - [GFramework.Core/command/CommandBus.cs](file://GFramework.Core/command/CommandBus.cs#L9-L62) - [GFramework.Core/query/QueryBus.cs](file://GFramework.Core/query/QueryBus.cs#L8-L23) ## 结论 通过将DDD的实体/模型、领域服务、领域事件与GFramework的模型/系统、事件总线、命令/查询总线、IoC容器、状态机等组件有机结合,可以在不破坏现有架构的前提下,构建高内聚、低耦合、可演进的领域模型。遵循初始化阶段完成注册、使用事件总线解耦、通过IoC容器管理依赖、在系统中实现复杂业务逻辑的原则,能够有效避免过度建模与性能陷阱。 ## 附录 - 最佳实践清单 - 在模型中保持纯领域状态与内聚行为,避免引入过多基础设施细节 - 将跨模型的协调逻辑放入系统,系统通过事件总线与其他组件通信 - 使用IoC容器集中管理依赖,初始化阶段完成注册并冻结容器 - 命令/查询总线仅做薄薄的编排,复杂逻辑下沉到系统 - 对外发布领域事件,内部使用命令/查询总线,保持读写分离 - 常见陷阱 - 将基础设施代码写入模型:应通过系统或服务封装 - 在事件回调中执行重活:应异步化或委派给系统 - 在总线层做过多分支:应将决策逻辑下沉到系统 - 忽视初始化顺序:确保在Init中完成注册,避免在Ready后注册