先当草稿用用,后期再调整思路,这个框架有点庞大,必须一点一点分析才行,这篇博客是我用来理清思路的>
PureMVC部分:
View和Controller都是通过注册观察者的方式来实现事件传递的
- 观察者:Observer:,实例化它时,传入一个处理通知Inotiferion的委托就可以了;
- Controller命令模式:注册命令时,其实注册了一个观察者,这个观察者引用了这个命令的excute方法来执行通知事件;
- Command:Excute()是来用执行事件通知的方法
- View层:可以注册中介者Mediator,中介者引用着具体的UI实体对象,来负责UI的对外交互,UI对象本身不参与逻辑
- Mediator:引用着UI对象,并且声明了自己对哪些通知事件感兴趣,由ListNotificationInterests()这个方法返回的list<’string”>对象来实现.Midiator也有处理通知的方法。注册中介者时,View层会根据list中的事件名称,实例化一个观察者,观察者利用中介者处理事件的方法来处理这个通知事件。
- Model层:可以注册代理Proxy,proxy是用来执行数据的相关操作的
- proxy:代理数据的相关逻辑,继承了Notifier,所以可以发出通知,执行相应的事件,其中的Object data就是所操作的数据实体类,proxy可以从网络上更新数据也可以通过对外的接口来更新数据,也可以当数据更新时发出通知事件
- Service:这个还没有深入看,目前来看,是用来处理网络消息的一个类
外观模式
以上部分都是MVC三个具体的功能细节,外观Facade统一了这些功能,对外开放。>
- 首先,Facade引用着上述三个MVC层的单例
- 承继了Inotifier接口 ,可以发起事件的通知
- 对应Mediator,Proxy,Command,Handler,用V M C Service中对应的方法来实现,注册,移除,判断等功能
实现了INotifier的类,都可以发送通知,实现这个功能的类有:Ifacade,Notifier,所有的命令Command类,代理proxy类,中介者Midiator。
使用框架的步骤
- Program
- 是建立框架和Unity的桥梁,它引用着Facade的实例
- 负责框架的启动,启动框架前,先进行资源的检查工作,通过调用资源管理者AssetLoader的初始化方法Init()来开启资源检查,不过,我不太喜欢这个框架带的资源管理类,打算用自己的代替。总之,第一步应该是资源的检查工作。
- 它还负责,Loom的初始化工作,这个类的作用好像是用来做协程工作的,暂时先不管它。还负责facade实例的释放工作。
- ProgramEntry,是Program的子类
- 实例化了facade的ApplicationFacade对象
- 启动了Facade的StartUp()方法,这个方法是框架的启动开始点。
- ApplicationFacade,继承了Facade类,是外观模式的具体实现类
- 在StartUp方法里,注册第一个命令:START_UP命令,写一个Command的类,来注册这个事件,来执行开始的逻辑。
- NotificationType:方便我们记录用到的事件名称的字符串,这个用到了partial来修饰这个类,不同类型的事件,放到不同的文件里写
- 事件通知的方式
- 所有的事件,都是通过构造观察者来实现监听的
- INotifier接口,定义了发送通知的方法
- 所有实现该接口的类,都有可以发送事件通知的方法,但底层调用的是Facade中的方法来实现具体细节的
- 而Facade发送通知的方法SendNotification(),底层调用的是Observers的NotifyObservers(),方法,可以这么说,Observers是最底层实现发送通知的方法,但我们可以不知道这个细节,我们只需要知道SendNotification()即可
- SendNotification()有三种重载,可以自已查看一下,方法内部会自动构造对应的通知Notification来做为数据进行传递
- INotification接口定义了通知时要传送的数据的格式,事件名称,事件数据,还有一个Type类型的参数
- 每个注册监听了事件的观察者,根据自己的需求,来处理通知事件
- -