前言

最近有机会了解到了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. cesium编程中级(二)源码编译

    cesium编程中级(二)源码编译 有些情况下,比如我们自己从Github下载了最新的代码,或者自己临时修改了一点代码,想要编译后的Build文件夹的内容,需要自行编译源码,这里介绍一下编译的方法 下 ...

  2. 关于onetoone 的2张表关联中间表的策略

    ProductCategoryVO.java 中间关联表 package com.syscxp.header.billing; import com.syscxp.header.search.SqlT ...

  3. C博客第01次作业---顺序,分支结构

    1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 经过了这一周的学习,从一开始对C语言一无所知,到现在能够写出基本的代码,感到非常开心. 学习C语言也并非想象 ...

  4. button不能添加伪类元素

    今日试了一下button添加伪类元素,结果是不行的前后都叠加在一起 html代码: <button class="form_btn" formType="submi ...

  5. java springboot+maven发送邮件

    springboot+maven发送邮件 废话不多说直接上代码 1. pom 文件导入jar包 <!--邮件发送--> <dependency> <groupId> ...

  6. CentOS下安装Docker

    简介:本篇文章介绍如何在CentOS系统下面安装docker系统. 官方文档:https://docs.docker.com/install/linux/docker-ce/centos/ Docke ...

  7. 3.3 PXC Strict Mode

    摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...

  8. 3.2 Multi-Master Replication

    摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...

  9. 多事实表 SQL实现和SSAS中MDX实现的差异

    如图,资产负债视图是事实表,损益表也是事实表.都包含年.月.组织.账簿信息. SQL如何实现呢? 简单粗暴,事实事实表串事实表,Full Join select 损益视图.年 ,损益视图.年月 ,损益 ...

  10. jQuery 发送 ajax json 请求。。

    $.extend({ postJson: function (data) { data = data || {} $.ajax({ type: "POST", url: data. ...