using GFramework.Core.command; using GFramework.Core.events; using GFramework.Core.model; using GFramework.Core.query; using GFramework.Core.system; using GFramework.Core.utility; namespace GFramework.Core.architecture; /// /// 架构接口,定义了应用程序架构的核心功能,包括系统、模型、工具的注册和获取, /// 以及命令、查询、事件的发送和处理机制 /// public interface IArchitecture { /// /// 注册系统实例到架构中 /// /// 系统类型,必须实现ISystem接口 /// 要注册的系统实例 void RegisterSystem(T system) where T : ISystem; /// /// 注册模型实例到架构中 /// /// 模型类型,必须实现IModel接口 /// 要注册的模型实例 void RegisterModel(T model) where T : IModel; /// /// 注册工具实例到架构中 /// /// 工具类型,必须实现IUtility接口 /// 要注册的工具实例 void RegisterUtility(T utility) where T : IUtility; /// /// 从架构中获取指定类型的系统实例 /// /// 系统类型,必须是class且实现ISystem接口 /// 指定类型的系统实例 T? GetSystem() where T : class, ISystem; /// /// 从架构中获取指定类型的模型实例 /// /// 模型类型,必须是class且实现IModel接口 /// 指定类型的模型实例 T? GetModel() where T : class, IModel; /// /// 从架构中获取指定类型的工具实例 /// /// 工具类型,必须是class且实现IUtility接口 /// 指定类型的工具实例 T? GetUtility() where T : class, IUtility; /// /// 发送并执行指定的命令 /// /// 命令类型,必须实现ICommand接口 /// 要执行的命令实例 void SendCommand(T command) where T : ICommand; /// /// 发送并执行带有返回值的命令 /// /// 命令执行结果的类型 /// 要执行的命令实例 /// 命令执行的结果 TResult SendCommand(ICommand command); /// /// 发送并执行查询操作 /// /// 查询结果的类型 /// 要执行的查询实例 /// 查询的结果 TResult SendQuery(IQuery query); /// /// 发送无参事件 /// /// 事件类型,必须具有无参构造函数 void SendEvent() where T : new(); /// /// 发送指定的事件实例 /// /// 事件类型 /// 要发送的事件实例 void SendEvent(T e); /// /// 注册事件监听器 /// /// 事件类型 /// 事件触发时的回调方法 /// 用于取消注册的句柄 IUnRegister RegisterEvent(Action onEvent); /// /// 取消注册事件监听器 /// /// 事件类型 /// 要取消注册的事件回调方法 void UnRegisterEvent(Action onEvent); }