QFramework框架分析
IArchitecture提供RegisterSystem, RegisterModel, GetSystem, GetModel, SendQuery,
SendCommand, RegisterEvent, UnRegisterEvent, SendEvent方法。
abstract class Architecture 抽象类Architecture继承Iarchitecture接口
Architecture内部提供:
Interface:单例
HashSet<ISystem> mSystem
HashSet<IModel> mModel
IOCContainer mContainer:IOC容器
//////////////////////////////////////////////////////////////
IOCContainer:
内部持有一个private Dic<Type, object> mInstances
public void Register=>mInstances.Add
public T Get<T>=>mInstances.Get
//////////////////////////////////////////////////////////////
回到架构上 RegisterModel RrgisterSystem通过调用IOC容器mContainer.Register实现
GetModel GetSystem通过调用mContainer.Get实现。
Event
EasyEvent:QF提供的简易的事件系统,实际项目中很少用EasyEvent。
EasyEvent内部:
private Action mOnEvent;
Register=>mOnEvent+=
UnRegister=>mOnEvent-=
Trigger=>mOnEvent.Trigger
EasyEvent本质上就是一个Action
EasyEvents
内部:
单例:mGlobalEvents
private Dic<Type, IEasyEvent> mTypeEvents
对外提供Add Remove Trigger方法
TypeEventSystem:
内部:
单例Globa
private EasyEvents mEvents
Register=>mEvents.Add
UnRrgister=>mEvents.Remove
Send=>mEvents.Trigger
Architecturet通过TypeEventSystem实现Event功能,事件系统的核心是一个Dic字典。
QF框架通过ICanXXX接口去定义架构每一层拥有的能力,
像是接口ISystem继承接口:IBelongToArchitecture, ICanSetArchitecture, ICanGetModel,
ICanGetUtility, ICanRegisterEvent, ICanSendEvent, ICanGetSystem。
因为ISystem接口继承了ICanGetModel,所以System可以访问Model层,如果ISystem没有继承ICanGetModel,
你们System就无法访问Model层。
QF为ICanXXX接口写了一系列扩展方法,于是就可以直接this.GetXXX()进行调用,语法糖。
还可以通过Architectrue.Interfact.进行调用。
QF的核心功能是通过IOC容器实现的,这种实现依赖的方式叫服务器定位器,可以在全局直接访问对应的接口,
在RegisterModel,RegisterSystem的时候不用传入他们所需要的依赖。还有一种叫DI容器,DI容器在注册的时候
需要先定义好所需要的依赖。QF这种服务器定位器全局访问的灵活性很高,DI容器的耦合度更低更适合做测试。

浙公网安备 33010602011771号