QFramework 架构提供了四个层级:
除了四个层级,还提供了 Command、Query、Event、BindableProperty 等概念和工具。
这里有一套层级的规则,如下:
Controller 的接口定义如下:
#region Controller
public interface IController : IBelongToArchitecture, ICanSendCommand, ICanGetSystem, ICanGetModel,ICanRegisterEvent, ICanSendQuery
{
}
#endregion
System 的接口定义如下:
#region System
public interface ISystem : IBelongToArchitecture, ICanSetArchitecture, ICanGetModel, ICanGetUtility,ICanRegisterEvent, ICanSendEvent, ICanGetSystem
{
void Init();
}
Model 的接口定义如下:
public interface IModel : IBelongToArchitecture, ICanSetArchitecture, ICanGetUtility, ICanSendEvent
{
void Init();
}
Utility 的接口定义如下:
#region Utility
public interface IUtility
{
}
#endregion
Command 的接口定义如下:
public interface ICommand : IBelongToArchitecture, ICanSetArchitecture, ICanGetSystem, ICanGetModel, ICanGetUtility,ICanSendEvent, ICanSendCommand, ICanSendQuery
{
void Execute();
}
public interface IQuery<TResult> : IBelongToArchitecture, ICanSetArchitecture, ICanGetModel, ICanGetSystem,ICanSendQuery
{
TResult Do();
}
通用规则是理想状态下的一套规则,但是落实的实际项目,很有可能需要对以上规则做一些修改。
修改的方式非常简单,比如我希望 IController 可以发送事件,那么我们只需要在 IController 接口上增加一个 ICanSendEvent 接口即可,代码如下:
#region Controller
public interface IController : IBelongToArchitecture, ICanSendCommand, ICanGetSystem, ICanGetModel,
ICanRegisterEvent, ICanSendQuery,
ICanSendEvent // +
{
}
#endregion
这样,就可以在 Controller 对象里,通过 this.SendEvent 来发送事件了。
如果是打算先了解或学习 QFramework 架构,那么我推荐就先按照 QFramework 默认的架构规范来做练习项目。
如果是打算马上用 QFramework 做项目,那么可以再保持原有开发习惯的基础上,一点点引入 QFramework 的概念,比如一开始用 BindableProperty 和 Architecture 来解决 Model 和数据更新的问题。
再慢慢开始用 Command 来解决交互逻辑臃肿的问题,以此类推,直到能完全掌握全部概念,最终能修改和定制 QFramework.cs 源码。