C# PureMVC 学习笔记

参考:http://www.cnblogs.com/skynet/category/441705.html

     http://www.jianshu.com/p/904b36ad37e2

PureMVC

GameObject : 基本上是最底层,除了Unity自身的组件外,不依赖PureMVC任何类。

Mediator : 只依赖GameObject,与GameObject一对一绑定,GameObject的输入通过事件(event)传递到Mediator调用。

Command :  最底层,通过消息系统与Mediator通信,依赖Proxy(因为有时需要通过Proxy得到实体进行一些运算,Proxy只进行一些数据操作而已,所以就不通过消息系统发送消息到Proxy中去了)。

Proxy : 最底层,除了对应的数据类之外,不依赖任何类。

View : 单例,除了内嵌了一个观察者模式的消息系统外,它的职责只有管理Mediator

Controller : 单例,在内部调用了消息系统的监听方法,它的职责只管理Command

Model : 单例,职责只管理Proxy

Facade : 单例,职责管理View,Controller,Model,因为View有消息系统,所以它间接也有发送消息的功能

Notifier : 功能类,调用了Facade的消息系统来通知其他对象,所以实质上是在调用View的消息系统(Observer)发送消息

从这些类的功能上可以看出,每个类的职责都很单一,功能之间分离得很明显。要是Unity能用新的C#特性的话可以优化得更好。

个人想法:

  1.Controller是利用了对应Type的类型来创建对象,从而调用方法,每次执行一个命令都要实例化一个类。对Unity的GC来说不太友好,可以使用缓存实例化的类来解决

  2.Observer消息系统利用了反射对象的方法名(字符串)来调用观察对象的方法,可以使用存储委托或事件来调用观察对象的方法

这里需要注意的是,一开始用很容易混乱,不知道哪个类写哪些逻辑。我个人理解是Mediator类只写与GameObject相关的逻辑,比如一些动画,行为等,Proxy只写与数据操作的逻辑,比如增删查改,Command写一些验证的逻辑,比如利用正则表达式判断是否符合要求之类的,或者先从缓存读取一些数据,反正就尽量不要经常访问Proxy,因为Proxy可能要远程连接服务器获取数据,比较慢。

备注:在最新的PureMVC版本里已经改为使用委托来做消息系统了。

原文地址:https://www.cnblogs.com/SeaSwallow/p/6782659.html