加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

初学PureMVC

发布时间:2020-12-15 03:57:28 所属栏目:百科 来源:网络整理
导读:学习flex编程也有快两年时间,一直以来都没有过多深入了解框架方面的内容。最近项目上没什么工作,恰好有大块时间来学习,提升个人能力。为什么选择框架呢,是因为觉得作为一个开发人员,而且工作两年多的程序猿,不知道框架为何物,说不过去。为什么首选pur

学习flex编程也有快两年时间,一直以来都没有过多深入了解框架方面的内容。最近项目上没什么工作,恰好有大块时间来学习,提升个人能力。为什么选择框架呢,是因为觉得作为一个开发人员,而且工作两年多的程序猿,不知道框架为何物,说不过去。为什么首选puremvc呢,我认为可能好学一些,MVC我是了解的,那这个“纯MVC”应该学起来也不难!开始我们的学习之旅吧~~~!

PureMVC是什么东东?不知道,百度一下。咔咔咔,慢慢看慢慢研究百度百科所讲,哎?发现更模糊了,哦,哦,哦,有单例模式、中介者模式、观察者(发布订阅)模式、外观模式、代理模式、命令模式,我擦嘞,这些都是什么东东。想想Gof的23种设计模式,顺便对其中几个比较模糊的又进行一番网上学习,总算是把大概弄懂了。

回到我们的PureMVC上,学习嘛,看博客文章,别人的分享。这篇《flex框架pureMVC的使用:第一步》,写的很精彩,语言也通俗易懂。第一遍读完,没明白;又来了一遍,还是没理解,反反复复看了好多遍,最终也才能明白50%左右,这怎么能行。哪里来的困惑呢,在自以为看懂的时候,随意翻了一下留言记录,看到有些人对博主撰写的文章质疑,提出的问题也确实很关键,我自己也反思好久扔不知如何解决,然后我就楞了,我靠,哥们你写的这东西靠不靠谱啊,别弄了大半天我学的是错误的内容,忧心忡忡的样子让我十分难堪。怎么办?

还是老老实实的,读一遍源码吧,对,自学源码。


惊呆了有木有,这就才几个源代码文件呐,就有如此的好用的框架,3个核心类,10个接口,8个接口实现类,各司其职,各有所用。

专心认真的读一下,每个类中没有多少行,逻辑也比较易懂,看完后就会豁然开朗,啊,原来是这么回事。


PureMVC框架的目标很明确,即把程序分为低耦合的三层:Model、View和Controller。三个单例模式的核心类,以及单例模式的外观类Facade。

model:Model保存对Proxy对象的引用,Proxy负责操作数据模型,与远程服务通信存取数据,保证了Model层的可移植性;

view:View保存对Mediator对象的引用。Mediator对象操作具体的视图组件,直接改变视图组件的状态,实现把视图和控制它的逻辑分离开来。

controller:Controller保存所有Command的映射。Command类是无状态的,只在需要时才被创建。Command可以获取Proxy对象并与之交互,发送Notification,执行其他的Command。经常用于复杂的或系统范围的操作,如应用程序的“启动”和“关闭”。应用程序的业务逻辑应该在这里实现。

Facade:单例模式,负责初始化核心层(Model,View和Controller),并能访问它们的Public方法。在实际的应用中,只需继承Facade类创建一个具体的Facade类就可以实现整个MVC模式,不需要在代码中导入编写Model,View和Controller类。Proxy、Mediator和Command就可以通过创建的Facade类来相互访问通信。


过多的代码解读,不过多介绍,相信大多数人都能看得懂源码,在学习的时候最大的疑惑就是,为什么发送一个notification,就会有相对应的medicator,command执行对应的操作呢,它们是怎么知道有这样的notification发送呢?找啊找啊找,找啊找啊找,找到一个好朋友,敬个礼啊,握个手啊,我去,原来在这:

IFacade接口文件中定义如下函数:

function notifyObservers( note:INotification ) : void;

Facade接口实现类中:

public function notifyObservers ( notification:INotification ):void {
			if ( view != null ) view.notifyObservers( notification );
		}

view是IView接口的实现类的引用,那我们就去View类中找。

在function notifyObservers( notification:INotification ){}中最关键的一行

L126行,observer.notifyObserver( notification );

再去看Observer类

public function notifyObserver( notification:INotification ):void
		{
			this.getNotifyMethod().apply(this.getNotifyContext(),[notification]);
		}

调用到AS3最低层的函数,这没跑了。

this.getNotifyMethod()是函数,也就是即将执行的方法名;

this.getNotifyContext()是对象,也就是执行上述方法的对象;

[notification]是通知数组,也就是上述对象执行上述方法需要传递的参数,说白了就是括弧中的东西。


我们回过头来看看View类:

public function registerObserver ( notificationName:String,observer:IObserver ) : void{}方法

observerMap[ notificationName ] = [ observer ];

observerMap是以notificationName存储的observer的对象实例;

而public function registerMediator( mediator:IMediator ) : void{}中

var observer:Observer = new Observer( mediator.handleNotification,mediator );

mediator是以自己的handleNotification为执行函数进行注册的,所以在执行notifyObservers( notification:INotification )方法时就相当于循环执行如下语句:

mediator.handleNotification(notificationName);


我们再看看Controller类:

public function registerCommand( notificationName : String,commandClassRef : Class ) : void
		{
			if ( commandMap[ notificationName ] == null ) {
				view.registerObserver( notificationName,new Observer( executeCommand,this ) );
			}
			commandMap[ notificationName ] = commandClassRef;
		}

executeCommand是什么?

public function executeCommand( note : INotification ) : void
		{
			var commandClassRef : Class = commandMap[ note.getName() ];
			if ( commandClassRef == null ) return;

			var commandInstance : ICommand = new commandClassRef();
			commandInstance.execute( note );
		}

哦,是这样啊。为什么command能够执行对应的notificationName原来如此啊。

也就相当于是command.execute(notificationName);


========================================================

总算是把核心代码,核心方法给搞定了,剩下的就是如何来真正使用这个框架。看明白了只能说是你看懂了,真正的会用才是真的会。在源码中都有对每个方法每个类作用的注释,在通读精度代码后再看看注释,会对理解的更清晰,具体的PureMVC框架的例子,之前介绍给大家的Blog中就很好,而且个人认为也比较正确的,对于其中的几个失效链接无所谓,关键在于理解框架思想。同时,在网上还能找到相关的例子应用,比较多。

解压缩puremvc-as3-standard-framework-master.zip文件,你会在根目录下发现"README.md",这个里面也有很好的例子,就是有些久远罢了。


pureMVC的版本有些年头,不知道现在还有没有人使用这个东西,再加上已经没落的Flex编程技术,不知道学这个还有没有用处。说回来,不管这框架以后怎样,在整个学习的过程中还是有很多感悟,别人的代码读起来就是比自己写的那个精彩简洁,能学到的还是很多很多。

接下来,会对实际使用的流程演示任务采用这个框架,反正项目不着急,正好拿来练练手,顺便熟悉熟悉。再往后,应该学习学习其他的几个框架。

加油,只要你认真,什么都不是事。这都不是事,该死的春运,该死的假日办。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读