SimpleFramework NGUI/UGUI 0.3.8升级注解

今天忙活一整天,终于把0.3.8的版本搞完并且上传了。以后每个版本升级后,会有个帖子注明升级的一些注意点。0.3.7系列更新了5个小版本f1-f5,主要是一些小的BUG修改。0.3.8更新主要是在0.3.7 f5的基础上,把PureMVC给干掉了,因为我最近跟群友沟通交流,发现虽然大家的确有用的,但是它的繁杂程度一下子提高了用户的学习成本,分的地方较细,非常零碎。我琢磨了一个多星期,想怎么改,决定还是用消息系统来进行解耦,也看了朋友们推荐的消息方案(http://www.newhappy.com.cn/?p=148),虽然精简,但是并不是很满意,因为我心里还是比较喜欢PureMVC的消息系统。或者说使用方式优雅吧。所以今天开搞的时候,我就试着将PMVC的MVC框架都干掉了,但是留下一个赤裸裸的消息系统(修改一堆代码实现),但是发现它的Controller层的消息通讯机制与View层的是沾合在一起的,这个消息系统不支持View,我晕了,下午小睡一觉醒来,开始重写View层的通讯机制,并且有机的整合进了它的消息系统。最终完成。

AppFacade + Controller层通讯(修改版)+重写的View层通讯 = 0.3.8的框架

虽然说是干掉,但是很多朋友一定会又开心,又担心,担心使用方式又有大的变化,又要重新整理,其实不用担心,我之所以最终决定还是用PMVC的消息系统,原因就在于不让大家再重新学习,之前的理解可以照样生效。兼容性也是考虑过的。接下来我们说下关键点。

(1)Framework目录里面的仅仅留下了消息系统最需要的几个类,其他的都删除了。因为这次修改已经算是SimpleFramework自己的消息系统了,所以很多的地方跟Unity及其框架整合的多了些,比如View类,是根据需要重写过的,而不是原来的。

(2)Module层目录删掉了,原来存在的SocketProxy.cs类,移动回了Network目录的SocketClient.cs。这样理解起来就是普通的类了。没什么特别的。

(3)原来Common/BehaviourBase.cs类被删除,其内容完全整合进了View.cs里面。现在的AppView直接继承自View类。而View类直接与框架结合。

(4)为了兼容性,PMVC的AppFacade模式保留了下来,因为它的总调用出口的方式还是值得推崇的。

(5)Controller层的Command调整:删除了Controller/Boostraps目录及其下面的3个启动注册的命令类,并将启动注册管理器的代码移动到了Controller/Command/StartUpCommand类。框架接收到启动命令后,直接在启动命令里面注册所有的管理器类。

(6)View层的AppMediator被删除,去掉了PMVC的框架后,自然AppMediator也就没有存在的必要了,它的内容直接整合进了AppView里面。

(7)Controller层的Command依旧支持,使用方式如下:
public class StartUpCommand : ControllerCommand {

    public override void Execute(IMessage message) {
        if (!Util.CheckEnvironment()) return;

        GameObject gameMgr = GameObject.Find("GlobalGenerator");
        if (gameMgr != null) {
            AppView appView = gameMgr.AddComponent();
        }
        //-----------------注册命令-----------------------
        AppFacade.Instance.RegisterCommand(NotiConst.DISPATCH_MESSAGE, typeof(SocketCommand));

        //-----------------初始化管理器-----------------------
        AppFacade.Instance.AddManager(ManagerName.Lua, new LuaScriptMgr());

        Debug.Log("SimpleFramework StartUp-------->>>>>");
    }
}
变化的地方是基类从原来的SimpleCommand改变成了ControllerCommand类。重写的函数Execute不变,依旧是它。注册命令RegisterCommand集成了PMVC的方式。也没变化。这是接收处理的地方,那发送的地方呢:
facade.SendMessageCommand(NotiConst.Update_MESSAGE, message);  只是换了个函数名字,从发送通知变成了发送消息命令。变化依旧很小。
(8)那新的View层的通讯机制怎么使用呢?因为是重新写的,所以使用方式有所变化,但是我也本着兼容性,尽量简化,如下:

    /// 监听的消息列表
    List MessageList {
        get {
            return new List()
            {
                NotiConst.Update_MESSAGE,
                NotiConst.Update_EXTRACT,
                NotiConst.Update_DOWNLOAD,
                NotiConst.Update_PROGRESS,
            };
        }
    }

    /// 删除/注册View消息
    void Awake() {
        RemoveMessage(this, MessageList);
        RegisterMessage(this, MessageList);
    }

    /// 处理View消息
    public override void OnMessage(IMessage message) {
        string name = message.Name;
        object body = message.Body;
        switch (name) {
            case NotiConst.Update_MESSAGE:      //更新消息
                UpdateMessage(body.ToString());
            break;
        }
    }
其实根据上面的注释,学过原来框架的同学直接就能看懂了,View新的方式虽说变化了,但是只是更加精简,而不是更加复杂,从消息列表、注册、删除消息、到消息接收处理,都在同一个类中完成。那发送呢?嘿嘿,跟Controller层发送消息是一行代码,我的框架会自动区分是哪个层。
facade.SendMessageCommand(NotiConst.Update_MESSAGE, message);

(9)因为Wrap.lua承接了动态注册Wrap的功能,上个版本除了添加_GT(type),还需要手动添加到Wrap.lua,操作有些繁琐,0.3.8添加了自动注册的开关:AppConst.AutoWrapMode,如果不需要自动,请关掉即可。

以上就是0.3.8框架的升级注意部分,还有不明白的,请在群里@骏擎CP,多谢支持~~

上一篇: uLua1.20/1.21关于动态Wrap的使用必读!!!
下一篇: [转]luajit在Unity编辑器下的使用
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 1 | 引用: 0 | 查看次数: -
vinici[2016-11-23 10:27 AM | | | 221.226.212.74 | del | 回复回复]
有没有基于tolua的框架,看了半天发现是ulua的
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭