简单的开始StrangeIoc之旅

StrangeIoc,也就是MVCS框架。她是什么,这里我就不赘述了,网上大篇幅的列举了purMVC和StrangeIoc的各个特点和功能。就我个人而言,更喜欢MVCS,其一是因为它的绑定机制用起来很舒服,再一个依赖注入获得对象更便捷,Dispatcher绑定事件传递消息也似曾相识。当然不熟悉的刚开始用会很绕,不过当你第一次发现这样写的好处之后也就一发不可收拾了。

我觉得她不能算是一个轻量级的框架,虽然官网这么说的,但是源码是真心多啊(不知道重量级是有多重…)。但是她还是非常简单实用的一个解耦的框架。我们一般也不会把mvc的整个架构全部用到游戏中,只是应用其中的一小部分功能,像我就喜欢用它来解耦,Model会用自己写的单例获取。

对了,再说一点,StrangeIoc中的Service不单单指服务器,我觉得更多的是一个对外开放的接口,像和串口板子交互的接口之类的都可以整理一下在Service里进行处理;

附上一个官网的流程图。(http://strangeioc.github.io/strangeioc/)
最下面一个大大的图片,看多了之后发现这个图真的很好,言简意赅的把StrangeIoc最精华的都写里面了。而且越看越舒服,越清晰。
简单的开始StrangeIoc之旅_第1张图片
说的多了,写这个主要是想记录一下详细的初始化和使用的基本流程,不会很多,但顺一遍应该也能知道怎么开始使用她了,还是很容易上手的。

1.初始化框架
首先我们需要创建两个类,一个继承自ContextView,一个继承自MVCSContext。分别对应上图中的ROOT模块和MVCSContext模块。继承需要引入一个命名空间…

using strange.extensions.context.impl;

这两个类ROOT相当于框架的入口,MVCSContext则是粘合框架的各个模块,也就是设置绑定的位置。图中也在MVCSContext处标出了三个主要绑定和消息派送器dispatcher。

然后让我们先处理继承MVCSContext的类,这里我给类起名为GameContext。
在MVCSContext中找到第三个包含自动映射的构造函数,注意构造函数的名字要和你创建的类的名字相同。
简单的开始StrangeIoc之旅_第2张图片
然后我们暂时就不用管它了。

来到入口类,先F12到ContextView类,我们会发现她很贴心的给了我们一个初始化框架的示例写法,接下来就好办了,照着她的示例写就好了。这也是为什么之前我们要找到对应的构造函数的原因啦。

简单的开始StrangeIoc之旅_第3张图片
入口类成功获得了MVCSContext的类对象,也在Awake函数里Start了,我们也就成功初始化MVCS框架了。
简单的开始StrangeIoc之旅_第4张图片

光开始还不够,启动游戏的时候,我们会想先播放一段开场动画,来一个xiuxiuxiubiuiubiu的炫酷效果。这里也就引出了另一个重要的功能,那就是Binder(绑定)。

2.关于绑定
StrangeIoc的核心就是绑定啦,看上面的大图,她也贴心的把三种绑定列举了出来。
绑定就像委托中的注册,把一个和另一个绑定起来 实现功能。我们简单的来了解一下:

简单的开始StrangeIoc之旅_第5张图片
injectionbinding:
主要用来绑定该类型对象,使得程序中各个地方可以通过contextview访问得到该对象。如model中的数据。
commandbinding:
是为了将命令绑定到方法中,就是将利用dispatcher广播的事件绑定到对应的执行方法中。
mediationbing:
是为了将view注入中介mediator中,把具体操作放到mediator中执行。

不要懵,我们来稍微理解一下这三个绑定:
injectionbinding主要是为了方便通过依赖注入获取所需对象(而且依赖注入听起来特别高大上)。就相当于把一个类对象存放到一个公共的容器中,当你需要它的时候可以直接获取。

commandbinding的话,我们先看一下他的两个参数,它是将一个enum和一个类绑定到一起,很简单的就想到了委托嘛,所以这就是把一个命令编号和一个执行方法绑到一起的功能啦。

mediationbing是UI显示方面的绑定啦,仔细观察大图也会发现,View被分成了两个部分,View和Mediator,也就是把UI显示和逻辑功能分开,实现解耦合的目的。再到实际中我们会发现一个UI窗体只需要挂载一个View,Mediator在运行之后自动挂载到实体上,也就是这个绑定的作用了。而且通过绑定,VIEW模块内部对应的一组View和Mediator也可以使用内部的派发器传递信息。

好了,我们已经大概了解到了绑定的用法和功能,那么应该在哪写这些绑定呢。

还是看图,三种绑定都在MVCSContext的模块里,那么我们就在MVCSContext去找重写的方法吧。然后就,一层…一层…又一层…诶,等下,终于在Context这一层,我们看到了两个可以重写的函数。

简单的开始StrangeIoc之旅_第6张图片
哈哈,多亏她很贴心的给我们加了注释,翻译过来就是:
重写这个函数用以映射特定于项目的绑定。以及,覆盖以在绑定之后但在应用程序启动之前执行操作。

一般情况下,写在mapBindings就可以了。

那么通过注入绑定的对象要怎么获取呢,
简单的开始StrangeIoc之旅_第7张图片
比如说我们需要按一个按钮连接服务器,那么需要获取到连接服务器方法的类对象,给这个类对象加一个[Inject]标签,就可以直接获取到指定的对象了。怎么样,是不是很方便。

好了到了现在,StrangeIoc的基本内容应介绍的差不多了,接下来让我们再再一次看大图,捋顺一下整个流程。

  1. 创建Root,获取MVCSContext对象,开始框架流程,同时在MVCSContext类中实现绑定。
  2. View执行了一个交互(点了一下按钮或者什么的),通过View类发消息到Mediator。
  3. Mediator处理逻辑,通过dispatcher发送命令到指定的Command执行命令。
  4. 通过注入绑定获取Mode或者Service的对象,处理命令并回传信息给Mediator。
  5. Mediator受到回调信息,并执行回调函数。
  6. 回调函数处理命令,显示到View模块的UI上。

那么今天就先这样吧,下一篇我会把各个模块以及他们之间的信息传递的过程都来一遍。

StrangeIoc不只有这么几个点,更多的就需要到我们自己去读她的源码了,毕竟开源的,可以随便读读写写改改,哈哈。

你可能感兴趣的:(StrangeIoc)