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容器的耦合度更低更适合做测试。

posted @ 2026-07-30 18:51  apssic  阅读(4)  评论(0)    收藏  举报