前言

最近有机会了解到了StrangeIoc框架,就拿来跟自己比较熟悉的pureMVC进行一下简要的对比。这两套开源框架都是基于MVC模式的扩展,pureMVC是一个跨平台跨语言的MVC轻量级应用框架,它最早是应用在flash开发中,后来经过不断的发展,现已支持几乎所有的平台,当然在unity开发中应用也很广泛;StrangeIoc是一款基于MVCS的框架,专门C#和Unity而设计,可以直接在Asset Store下载。
pureMVC介绍
pureMVC框架示意图
 

在MVC模式中,应用程序被分为低耦合的三层:Model、View和Controller。PureMVC在此基础上有所扩充,通过模块化设计,可以进一步降低模块间的耦合度,创建了一个易于扩展限制很小的通用框架。
 
PureMVC源码分析
 
1、核心层中是三个单例类:
Model:保存对Proxy对象的引用,Proxy负责操作数据类型
View:保存对Mediator对象的引用,Mediator负责操作具体的视图组件
Controller:保存所有Command的映射,Command执行相关命令。
在实际开发中,你根本不需要关心这三个类,只需调用Facade类的GetInstance方法即可启动pureMVC框架,Facade会自动帮你初始化MVC环境。
 
2、框架内部通讯:
pureMVC内部通讯是基于Observer/Notification 机制(观察者模式)来实现的,只需要使用一个非常简单的方法从 Proxy,Mediator, Command 和 Facade 发送 Notification。
 
3、Facade:
这是pureMVC提供的与核心层通讯的单例类,它负责初始化Model、View、Controller,Proxy、Mediator 和 Command 就可以通过创建的 Facade 类建立起通信机制。
 
4、Mediator
Mediator(中介) 对应MVC中的View.,在实际应用中,Mediator经常与view是绑定的关系, Mediator可以监听View Component发出的Event,开发时,在ListNotificationInterests方法中添加自己关心的Notification, 当关心的Notification发出时, 会执行Mediator的HandleNotification方法中,在这个方法中需要对Notification做处理。Mediator既可以发送通知,也可接收通知。
 
5、Proxy
Proxy通常情况下会暴露一组公共API供Controller(command)或View(mediator)调用,用来对数据进行增删改查。在pureMVC的设计中,proxy只可以发出Notification,而不能接收Notification
 
6、Command
command与Notification是一一对应的,注册Command时,会将Notification与对应Command进行绑定,当该Notification发出时,对应command就会执行它的Excute方法。puremvc中有两种Command:第一种是SimpleCommand ,只有一个 execute 方法,execute 方法参数是一个Inotification 实例。实际应用中,你只需要重写这个方法就行了。第二种是MacroCommand,让你可以顺序执行多个 Command。实际应用中,你需重写这个方法。
 
pureMVC特点:
1、pureMVC巧用了几种设计模式:代理模式 、观察者模式 、中介者模式 、命令模式 、单例模式 。
2、使Model、View、Controller之间耦合降低,但也容易造成了代码冗余量大。
3、pureMVC将Observer/Notification保存在字典中,Notification的传递也都要经过装箱拆箱操作,如果在大型项目中使用pureMVC可能会影响性能。
 
StrangeIoc介绍
框架简介
StrangeIoc 是一个基于MVCS的框架,支持依赖注入。网上很多博文都说strangeIoc是一个依赖注入框架,其实这种说法是不够正确的,这个框架的核心,是绑定。strangeIoc的核心内容就是对绑定进行了包装,可以绑定一个接口到它的实体类上面。或者绑定一个事件到一个处理者上。或者绑定两个类:当一个被实例化时,自动创建另一个的实例。
IOC也被成为控制反转,在StrangeIOC与许多框架通常用这种技巧实现一个ioc容器,将代码内的依赖关系交给第三方(IOC容器)管理,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了内部的容器。需要什么类型告诉工厂你要的类型,他会生产给你一个实例,简而言之我们可以看作是一个用来new类型的工厂 。
 
starngeIoc框架示意图

Root(contexView):根节点,继承自MonoBehavior ,创建一个MVCS Context,是MVCS架构的入口。
 
MVCS Context  :进行view与mediator,services接口与实现该接口的类的绑定等。
 
CONTROLLER:大部分逻辑处理放在这一层,连接VIEW和SERVICES,MODELS层,起到数据总管理的作用。
 
VIEW:一切用户可以看到的,均在这一层。细分为view和mediator(中间层),UI和数据分离,view负责显示画面,mediator通过Dispatcher发送数据请求,与CONTROLLER层进行交互,起到数据交流中转站的作用。
 
SERVICES层:服务层,客户端的数据通过SERVICES层与外界交互,连接服务器取得数据。基本上与服务器的数据交流均通过SERVICES层完成。
 
WEB:服务器
 
MODEL:数据模型
 
绑定(Binding)
strange的核心是绑定,绑定的工作都会放在MVCSContext中做, strange的binding由两个必要部分和一个可选部分组成,必要部分是a key and a value  key触发value,比如一个事件可以触发回调,一个类的实例化可以触发另一个类的实例化。可选部分是name。
绑定可以分为injectionbinding  ,commandbinding,mediationbing这三种,注入绑injectionbinding主要是用来绑定该类型对象到上下文,这样使得程序中各个地方可以通过contextview访问得到该对象;commandbinding是为了将事件或信号与命令绑定;mediationbing是将view注入中介mediator中。
 
 
注入(Inject)
注入的功能,就是我们想获得某种类型的对象时不需要自己去创建,只要加上[Inject]标识就可以根据你bind时的规则获得对象,根据这些Inject标识,框架会找到这些属性,通过类型判断按Context中注册的规则将对象的实例赋值给该属性。
 
框架内部通讯
StrangeIOC提供的通讯方式有两种 :一种是IEvent传递,还有一种是通过Signal传递,这两种方式,我们实际开发时使用一种即可,使用IEvent的好处是自己可以继承此接口自己实现自定义的消息体,缺点是每次接收到消息的时候都是以IEvent接口的形式,这是一种类型不安全的做法,同时也会造成不必要的性能损耗。Signal是StrangeIOC框架成熟后提供的,Signal的好处是强类型 ,类型安全也不需要强转,你只需要在接收的地方Inject属性即可,目前,大家开发时都使用signal的方式比较多。
 
总结
pureMVC与strangeIoc都是非常适合unity项目开发,pureMVC框架足够简单,源码除去注释行总共才600多行,看懂源码也不是什么难事,有兴趣的朋友可以去下载研究 https://github.com/PureMVC/puremvc-csharp-standard-framework ,在实际开发中,我们通常也会对pureMVC框架进行扩展,比如加入Service模块,负责与服务器通讯,这也是很方便能实现,同时,针对pureMVC的性能问题,网上也能找到一些优化的方案,pureMVC可扩展性是很强的。strangeIoc框架上手会比strangeIoc困难一些,就像它的名字一样,使用起来确实很奇怪,项目开发中会涉及各种事件和信号调用,调试起来会比较麻烦。框架的作者介绍这是一款轻量级的框架,但这框架的源码有两万多行,这可不算轻量,我看了几眼框架的源码就脑阔痛,但不可否认它确实是一款优秀的框架,通过依赖注入,event&signal传递的方式,大大降低模块之间的耦合,使用起来也很灵活,据我所知腾讯有很多上线项目都用到了这个框架,地址https://github.com/strangeioc/strange-core 。至于在开发时使用哪个框架比较好,这还得看实际情况,但显然pureMVC使用起来成本更低。
 

pureMVC与strangeIoc框架对比的更多相关文章

  1. Unity StrangeIoC框架

    Unity StrangeIoC框架  http://blog.csdn.net/y1196645376/article/details/52746251    

  2. StrangeIoc框架学习----在项目中实战

    最近,因为公司的项目一直在研究StrangeIoc框架,小有所得,略作记录. StrangeIoc是一款基于MVCS的一种框架,是对MVC思想的扩展,是专门针对unity开发的一款框架,非常好用. 一 ...

  3. Android自动化测试框架对比

    1.Monkeyrunner:优点:操作最为简单,可以录制测试脚本,可视化操作:缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限:2.Rubotium:主要针对某一个APK进行自动化测试,AP ...

  4. Android &Swift iOS开发:语言与框架对比

    转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...

  5. 各种ORM框架对比(理论篇,欢迎来观摩)

    各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...

  6. 微服务架构介绍和RPC框架对比

    微服务架构介绍和RPC框架对比 1.微服务架构 1.1 特征 自动化部署,端点智能化,语言和数据的去中心化控制. 1.2架构 一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中 ...

  7. TensorFlow与主流深度学习框架对比

    引言:AlphaGo在2017年年初化身Master,在弈城和野狐等平台上横扫中日韩围棋高手,取得60连胜,未尝败绩.AlphaGo背后神秘的推动力就是TensorFlow--Google于2015年 ...

  8. 前端测试框架对比(js单元测试框架对比)

    前端测试框架对比(js单元测试框架对比) 本文主要目的在于横评业界主流的几款前端框架,顺带说下相关的一些内容. 测试分类 通常应用会有 单元测试(Unit tests) 和 功能测试(Function ...

  9. 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink

    转自:https://www.cnblogs.com/reed/p/7730329.html 今天看到一篇讲得比较清晰的框架对比,这几个框架的选择对于初学分布式运算的人来说确实有点迷茫,相信看完这篇文 ...

随机推荐

  1. 总结目前为止学到的关键字(break,continue,private,static,this,super,final,abstract)

    1.控制跳转语句:break(结束) 使用的场景: a.循环当中 b.switch break关键字需要注意的问题: 1.break关键字只能用于循环和switch语句当中,其本质就是结束整段语句的意 ...

  2. 获取BinaryReader中读取的文件名

    BinaryReader br; br = null; br = new BinaryReader(new FileStream("E:demo.txt", FileMode.Op ...

  3. 解决:sql server无法在C盘下创建database/操作系统错误5(拒绝访问)

    问题: ——无法在C盘的任何位置创建数据库文件 ——在非系统盘的F盘可以创建数据库文件 解决方法1:禁用“以管理员批准模式运行所有管理员" 解决方法2:打开C盘对Users用户的完全控制权限 ...

  4. HTML防止input回车提交表单

    原链接:https://blog.csdn.net/ligang2585116/article/details/44699567 自动提交情况说明: 1.默认情况下,单个输入框,无论按钮的type=& ...

  5. robot framework-接口测试实例一

    需求:api/car/detail/recommendcar.json   接口返回的车辆数量少于等于20且车辆不能重复 分析:统计接口中返回的列表的长度,再把carid拿出来组成一个新的列表,判断这 ...

  6. Android IPC机制—Binder的工作机制

    进程和线程的关系 IPC机制即为跨进程通信,是inter-Process Communication的缩写.是指两个进程之间进行通信.在说进程通信之前,我们的弄明白什么是线程,什么是进程.进程和线程是 ...

  7. Android中LayoutParams的用法

    简单说说 自己对 android LayoutParams的理解吧,xh写不出高级文章是低级写手.public static classViewGroup.LayoutParamsextends Ob ...

  8. Sci-Hub

    提到Sci-Hub这个文献下载利器,大家肯定都不陌生.你在各大SCI杂志上看到的英文文献,90%以上都能免费下载.因为它严重侵犯了爱思唯尔.施普林格.Wiley等各大出版商的利益,遭到起诉与封杀. 不 ...

  9. 【性能测试】:监控Mysql数据库方式

    1,  进入到/etc目录下,打开my.cnf文件,在文件最后添加几行 slow_query_log = ON                             //打开慢查询开关 slow_q ...

  10. android samsung note3  device not found

    descriptiong : android  samsung note3 device not found solution: usb link by PTP, DONE! (be curiosly ...