PureMVC新手入门
PureMVC是一个Unity常用的入门简单框架,PureMVC分为标准版本和多核版本。这里只讨论单线程下的PureMVC的学习笔记。
文章目录
- 1.什么是PureMVC
- 2.各层的职能
- 3.PureMVC流水线
- 4.生命周期
- 5.模块化协作开发
- 6.实际开发中会遇到的问题
- 6.PureMVC内部进一步划分
- 7.用到的设计模式
1.什么是PureMVC
MVC全名是Model View Controller,是模型(Model)-视图(View)-控制器(Controller)的缩写,一种软件设计典范,用一种业务逻辑,数据,界面显示分离的方法组织代码。通过把职责,性能相近的成分归结在一起,不相近的进行隔离,MVC将系统分解为模型,视图,控制器三部分,每一部分都相对独立,职责单一,在实现过程中可以专注于自身的核心逻辑。
而PureMVC架构在MVC基础上通过引入Mediator+事件(通知)机制很好的解决了view(视图层)与controller(控制层之间的紧耦合问题)。
在大型项目中,MVC中的Controller主要就是负责协调View与Model,让两者之间尽量“解耦”。(相互之间不知道对方的存在)
PureMVC是一款基于MVC的开源框架,最初是为基于ActionScript3的Flash程序开发的,后来被移植到16种语言平台上。
使用框架的主要目的:
1.项目耦合性低,复用性高。
2.相对于复杂多变的需求变化,一般逻辑编写都相对固定(位置固定,方式固定),减轻了复杂项目对程序员的“功力”的要求,特别适合中大型项目以及需求变更频繁的情况。
MVC与PureMVC对应关系图
MVC | PureMVC | |
---|---|---|
模型图 | Model | Proxy |
视图层 | View | Mediator |
控制层 | Controller | Command |
2.各层的职能
名称 | 继承接口 | 职能 |
---|---|---|
模型层 | Proxy |
1.发送但不接收消息。 2.与服务器端连接,获取与上传业务数据。 3.大型网络游戏,可以进一步抽象出“数据代理服务层”,专门从事与服务器交互通信事宜。 |
视图层 | Mediator |
1.发送与监听消息. 2监听Component自身的事件,且转化为消息。 3.设置与调用Component数据与方法。4.直接调用Proxy(推荐尽量少用)。 |
控制层 | Command |
1.管理Proxy与Mediator层,负责注册,查询获取,移除等。 2.直接调用多个Proxy,进行复杂业务逻辑处理。 3.对(继承MonoBehaviour)的脚本做动态管理与对象加载操作。 4.Command本身生命周期很短,在整个生命周期中并没有类的实例在运行,而是通过反射技术,一次性的得到类的对象(object),执行完(Execute)后结束。 |
3.PureMVC流水线
补充说明:
1.这里箭头表示意思是如果你打断点调试,按F11跟代码框架的流程。
2.这里虚线箭头方向不推荐使用,因为方向太多,在大型项目中容易乱。
3.为什么还会有控制层调用视图层,视图层调用模型层,这个考虑就是不要有太多的命令通知和消息通知,命令消息通知太多会造成项目的混乱。
4.模型层(Proxy)对外不处理消息,只能发送消息。
4.生命周期
PureMVC中三层生命周期不同:
1.Mediator与Model类都是从实例化到项目结束,或者手工销毁。
2.Command控制类,生命周期是从发起一个“命令消息”,PureMVC框架内部按照事先“绑定”的对应Command类,实例化一个对象。然后Command实例执行完Execute()重载方法后,立即销毁。
5.模块化协作开发
PureMVC通过Mediator与消息事件的机制,强有力的对项目进行分层解耦,这特别有利于模块化的开发与多人分工协作。
模块与模块之间只需要注意其消息的交互,而不用理会其里边的实际逻辑,在划分好功能模块后,使得多人合作开发能够更好的执行。
6.实际开发中会遇到的问题
1.把更多的逻辑都放在Mediator里面做处理,则可能会导致Mediator太庞大的问题。
2.Command中消息数量的问题:
命令模式(Command)将逻辑操作分离出来,使程序的耦合性进一步降低。但在实际的使用中可能会导致数量太多的问题。
如果对每一个"操作"(按钮,请求等)都去写一个Command的话,显得太过琐碎,消息名与Command的过量反而难以管理,这个需要在实际项目中结合具体业务逻辑进行取舍与综合考虑。
6.PureMVC内部进一步划分
视图层Mediator分为纯显示类View和显示控制类Mediator。
View:只负责简单的窗体数据显示。
Mediator:负责显示层的通讯,按钮点击事件,数据深度处理(需要多个类,
多个窗体协作)。
模型层Proxy分为纯数据类Vo和模型代理类Proxy。好处是:"数据本身"与"数据操作"相分离,易于存储,扩展等,耦合性降低与扩展性提高。
7.用到的设计模式
1.单例模式:三层与Facade都是单例模式。
2.观察者模式:消息传递。
3.中介者模式:用一个中介对象来封装一系列的对象交互。
整个PureMVC通过框架的约束与规则,对于外部系统(例如Unity脚本)来说,就是起到了一种"中介者"的作用,脚本之间不直接关联与调用,这就是一种架构级别的"Mediator"(中介者)设计模式的体现。
4.外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
5.代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。
6.命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
PureMVC是两种主要的模式贯穿整个框架:
1.委托/事件:微软是开发了一种比较自然的直接实现观察者模式的一种技术。
定义了一种一对多的依赖关系。视图控制层先注册,一旦我们使用SendNotification
,就会执行这个消息,最终使用反射的技术,把我们对应对象里面的对应方法执行了,就是实现了PureMVC中的消息传递,使得耦合性非常低的一种层和层之间的消息传递,这就是我们观察者模式。
2.中介者模式:用一个中介对象来封装一系列的对象交互。
我们把项目分为三层就是为了解耦,层和层之前可以独立的改变。
3.Facade模式是为了简化外围系统与系统三大核心类交互的复杂度。
PureMVC新手入门相关推荐
- 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)
新手入门:C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来. ...
- LINUX新手入门-1.装系统
LINUX新手入门-1.装系统 首先我们用虚拟机模拟 装linux系统,然后下一步下一步,然后完成后,编辑一些设置,把镜像放上面就可以了 选第一项,安装系统,查看镜像是否能运行,直接跳过,选择语言 和 ...
- 人工智能新手入门学习路线!附学习资源合集
有段时间没跟大家分享编程资源福利了!今天为大家整理了人工智能新手入门学习路线,同时附700分钟的学习资源合集,相信这套福利可以帮你顺利入行AI!文末领取全部资料. 一.AI基础好课学习资料整理(约31 ...
- 【LaTeX】E喵的LaTeX新手入门教程(4)图表
这里说的不是用LaTeX画图,而是插入已经画好的图片..想看画图可以把滚动条拉到底.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇 [LaTeX]E喵的LaTeX新手入门教程(2)基 ...
- 想学python都要下载什么软件-学编程闲余时间建议下载的软件_Python新手入门教程...
原标题:学编程闲余时间建议下载的软件_Python新手入门教程 Python新手入门教程_在手机上就能学习编程的软件 很多小伙伴会问:我在学编程,想利用坐地铁坐公交吃饭间隙学编程,在手机上能学编程的软 ...
- 编程入门python语言是多大孩子学的-不学点编程,将来怎么给孩子辅导作业―Python新手入门教程...
为了填满AI时代的人才缺口,编程语言教育都从娃娃抓起了!如果你还不懂Python是什么将来怎么给孩子辅导作业呢? Python新手入门教程 近期,浙江省信息技术课程改革方案出台,Python言语现已断 ...
- python2好还是python3好-新手入门选择Python2还是Python3
1. 前言 Python的发展很快,几乎每年都在版本迭代.目前Python有两个主要版本,一个是python2.x,另一个是python3.x. 兔子先生最早接触Python的时候,使用的是pytho ...
- python新手入门-python新手入门方法
随着人工智能 大数据的火热 Python成为了广大科学家和普通大众的学习语言.在学习Python的过程中 有很多人感到迷茫 不知道自己该从什么地方入手,今天我们就来说一些新手该如何学习Python编程 ...
- 【LaTeX】E喵的LaTeX新手入门教程(6)中文
假期玩得有点凶 ._.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇 [LaTeX]E喵的LaTeX新手入门教程(2)基础排版 [LaTeX]E喵的LaTeX新手入门教程(3)数学 ...
最新文章
- http和dubbo的区别_(转载)Dubbo 接口是什么? 与http 接口有什么区别
- 苹果ANCS协议学习【转】
- dos配置java_windows dos命令配置JAVA环境变量
- oracle asin(),PLSQL ASIN用法及代码示例
- python 科学计算机_在这个免费的虚拟俱乐部中学习计算机科学和Python的基础知识
- 超越BI,数据产品的前途在哪里?
- pulsar学习笔记1:helloworld
- 济南学习 Day 5 T2 am
- 英特尔与Verizon合力推动5G技术 新网络传输革命即将来临
- 圣杯布局(三栏布局)
- 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use
- 迅雷界面引擎Bolt中编译失败的问题
- 三四线城市咖啡店的光荣与梦想
- 主流无线芯片厂商的自动信道选择算法小结
- android 根据基站测距,无线测距基站
- 兆位和兆字节之间有什么区别?
- JavaFx教程-01初识javaFX
- 自己当笔记写着玩吧--leetcode- 001
- 功能最全面 体验更极致 小兴看看mini升级版9月19日首发
- 实战智能推荐系统(5)-- 推荐系统评价指标