该框架的1.5版本位于https://github.com/robotlegs/robotlegs-framework/tree/version1,现在已经出了重新架构的2.0版本,所以我决定先研究已经成熟的1.6版本,有时间再研究2.0版本的。

我看完这个框架的源码和范例的第一印象就是自动化,这个框架把很多逻辑都集成到了系统内部,而我们只需要进行一些简单的映射,进行一些简单的功能实现就能完成一个项目了。

基本结构

Robotlegs 的MVCS实现将应用程序解耦为4层:Model-View-Controller (MVC) 和 Service层,view 层处理用户交互. model 层处理用户创建的或从外部获取的数据. controller 提供一种封装各层之间复杂交互的机制. 最后, service 层提供一种和外界(比如远程服务 API 或文件系统)交互的独立机制.

其核心主要是有4个类:

Context: 提供一个中心的事件 bus 并且处理自己的启动和关闭. 一个 context 定义了一个范围. 框架 actor 们处在 context 之内,并且在 context 定义的范围之内进行相互间的通讯.在利用Robotlegs框架时,我们需要继承该类,并实现我们自己的startup函数,当我们建立了Context后,startup函数会在初始化后自动运行,我们需要在这个函数里配置模型映射,事件映射和视图映射以及新建视图进行系统初始化,下面是一个例子:

public class ExampleContext extends Context
{ public function ExampleContext(contextView:DisplayObjectContainer, autoStartup:Boolean = true)
{
super(contextView, autoStartup);
} override public function startup():void
{
commandMap.mapEvent(ContextEvent.STARTUP, PrepModelCommand, ContextEvent, true);
commandMap.mapEvent(ContextEvent.STARTUP, PrepViewCommand, ContextEvent, true);
commandMap.mapEvent(ContextEvent.STARTUP, PrepControllerCommand, ContextEvent);
commandMap.mapEvent(ContextEvent.STARTUP, StartupCommand, ContextEvent, true); // fire!
dispatchEvent(new ContextEvent(ContextEvent.STARTUP));
} }

Actor: Model 和 Service都继承自Actor。

Command: Controller由Command实现,针对我们需要处理的消息,我们先定义相应的处理类,并在execute函数中进行处理。然后我们将消息和相应的Command映射起来:

commandMap.mapEvent(eventType:String, commandClass:Class, eventClass:Class = null, oneshot:Boolean = false)

Mediator:View层包括view component和Mediator,在建立视图前,我们需要先建立view component和Mediator之间的映射:

mediatorMap.mapView( ViewClass, MediatorClass, autoCreate, autoRemove );

建立完两者之间的映射后,当我们新建一个view component加入stage时,系统自动帮我们新建一个指定的Mediator与之相关联。

Mediator 负责所中介的 view component 发出的事件, 我们需要将消息和相应的处理函数映射起来:

eventMap.mapListener(myMediatedViewComponent, SomeEvent.USER_DID_SOMETHING, handleUserDidSomethingEvent)

SwiftSuspenders框架的应用

RobotLegs框架配备了SwiftSuspenders来实现它的自动化依赖注入。SwiftSuspenders框架的详细信息,见文章轻量级IOC框架SwiftSuspenders,下面说说这个框架在Robotlegs中的应用。

1.在新建Context时就进行一些值映射,这样可以轻松的保证一些对象在整个系统中的一致性。

protected function mapInjections():void
{
injector.mapValue(IReflector, reflector);
injector.mapValue(IInjector, injector);
injector.mapValue(IEventDispatcher, eventDispatcher);
injector.mapValue(DisplayObjectContainer, contextView);
injector.mapValue(ICommandMap, commandMap);
injector.mapValue(IMediatorMap, mediatorMap);
injector.mapValue(IViewMap, viewMap);
injector.mapClass(IEventMap, EventMap);
}

2.初始化Modal和Service时。因为一般这些都有Singleton的需求,可以利用injector.mapSingleton来轻松实现

3.用injector轻松实现添加view component时新建相关联的Mediator。

4.框架使用者也能从中获利。

系统自动化的实现

让我们再来回顾一下启动一个系统需要做的事:

1.新建Context

2.将Modal映射为Singleton

3.为消息映射相关的Command

4.为view component映射相关的Mediator

5.新建view component并加入view list中。

然后的然后,整个系统就跑起来了!

我们不需要为新建的view component建立Meditor,系统会在一个view component加入view list中后,从mediatorMap中找出和view component对应的Mediator类,并新建相应的Mediator。并且会自动的调用Mediator的onRegister函数,将Mediator处理的事件加入eventMap中。

我们不需要操心Modal的新建,一致性等问题,因为injector帮我们将其映射成了singleton,这样我们只需要在使用Modal的类中加入[Inject]注入点就行。

共用的eventMap使得各个部分的通信更容易,每个层都不需要操心和其他层之间的交互,只需要把自己的事情处理好,其他的事情通过dispatch将消息发出去让其他的层处理就行。

应用的例子

joelhooks为robotlegs写了很多的例子,可以通过https://github.com/joelhooks/robotlegsdemos看到,我就不赘述了。

Robotlegs框架1.5简介的更多相关文章

  1. Django框架-目录文件简介

    Rhel6.5 Django1.10 Python3.5 Django框架-目录文件简介 1.介绍Django Django:一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django, ...

  2. Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介

    约定 还记得上版本的第二十四篇的约定嘛?现在出来履行啦~ 为什么要重制? 之前写的专栏都是按照心情写的,在最初的时候笔者什么都不懂,而且文章的发布是按照很随性的一个顺序.结果就是说,大家都看完了,都还 ...

  3. Net框架下-ORM框架LLBLGen的简介(转载)

    Net框架下-ORM框架LLBLGen的简介 http://www.cnblogs.com/huashanlin/archive/2015/02/12/4288522.html 官方网址:http:/ ...

  4. iOS - 系统经常使用框架(framework)的简介

    系统框架(framework)的简介 ImageIO  - 该框架的接口可用于导入或导出图像数据及图像元数据 CoreTelephony  - 获取IMSI号,SIM卡背面的号码是SIM卡的电子串号, ...

  5. 分布式流式处理框架:storm简介 + Storm术语解释

    简介: Storm是一个免费开源.分布式.高容错的实时计算系统.它与其他大数据解决方案的不同之处在于它的处理方式.Hadoop 在本质上是一个批处理系统,数据被引入 Hadoop 文件系统 (HDFS ...

  6. java框架之struts2简介

    一.Struts2简介 1.Struts2概述                    Struts2是Apache发行的MVC开源框架.注意:它只是表现层(MVC)框架. M:model-----数据 ...

  7. IOC框架之Ninject 简介

    还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 上篇博客介绍了依赖注入的三种方式:构造方法注入,属性注入,接口注入!详情请参考 ...

  8. Django准备知识-web应用、http协议、web框架、Django简介

    一.web应用 Web应用程序是一种可以通过web访问的应用程序(web应用本质是基于socket实现的应用程序),程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 ...

  9. 01 . Go框架之Beego简介部署及程序流程分析

    Beego简介 beego是一个使用Go语言来开发WEB引用的GoWeb框架,该框架起始于2012年,由一位中国的程序员编写并进行公开,其目的就是为大家提供一个高效率的web应用开发框架.该框架采用模 ...

随机推荐

  1. 改centos7的网卡名

    学习参考的文章,地址双手奉上http://www.linuxidc.com/Linux/2015-09/123396.htm 1.查看服务器的流量使用情况,执行命令cat /proc/net/dev ...

  2. java中类的继承

    我们都知道java的四大特性:抽象.继承.封装.多态: 那么关于继承有哪些特性呢?下面看具体实例: (1) public class Person { public  int a=2; public  ...

  3. BizTalk 2013 Beta 新特性介绍

    BizTalk2013 Beta于2012年11月6日发布,下面来介绍一下BizTalk 2013 Beta的新特性. [核心更新功能] 1. 与云服务集成 BizTalk 2013 Server提供 ...

  4. 杭电ACM题目分类

    基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1056.1058. ...

  5. ecshop增加新字段及相应编辑器

    一.在数据库添加字段,会手写的就后台添加,不会就进入phpmyadmin默认的就行.      这是通用的写法:(这里是增加类似商品描述的字段,其他字段自行更改) ALTER TABLE `ecs_g ...

  6. 微信浏览器禁止页面下拉查看网址(不影响页面内部scroll)

    此类事件是手机touchmove默认事件行为,可以通过js代码隐藏事件: $(‘body’).on(‘touchmove’, function (event) {event.preventDefaul ...

  7. linux常用操作指令

    Linux常用操作指令: 常用指令 ls        显示文件或目录 -l           列出文件详细信息l(list) -a          列出当前目录下所有文件及目录,包括隐藏的a(a ...

  8. 磨刀不误砍柴工,使用visual studio之前应该先了解这些...

    注:以下的快捷键在vs2010中测试无误. 众所周知,vs是一个非常强大的开发平台,但是又有多少小伙伴熟悉以下这些快捷键呢? 当然,不知道这些快捷键与开发并没有直接关系,不过,就我而言,以下这些快捷键 ...

  9. CentOS修改mysql 用户root的密码并允许远程登录

    第一步:用帐号登录mysql[root@CentOs5 ~]# mysql -u root -p 第二步:改变用户数据库mysql> use mysql 第三步:修改密码,记得密码要用passw ...

  10. 关于WPF程序只运行一个实例的方法

    找到的方法有两种: 1)http://www.cnblogs.com/liuyazhou/archive/2009/11/02/1594364.html 2)http://codereview.sta ...