﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-真的骄傲梦想家园-随笔分类-PureMVC</title><link>http://www.blogjava.net/reallypride/category/34486.html</link><description>专业源于兴趣和努力</description><language>zh-cn</language><lastBuildDate>Sun, 07 Sep 2008 07:31:49 GMT</lastBuildDate><pubDate>Sun, 07 Sep 2008 07:31:49 GMT</pubDate><ttl>60</ttl><item><title>PureMVC的原理和逻辑</title><link>http://www.blogjava.net/reallypride/archive/2008/09/07/227544.html</link><dc:creator>真的骄傲</dc:creator><author>真的骄傲</author><pubDate>Sun, 07 Sep 2008 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/reallypride/archive/2008/09/07/227544.html</guid><wfw:comment>http://www.blogjava.net/reallypride/comments/227544.html</wfw:comment><comments>http://www.blogjava.net/reallypride/archive/2008/09/07/227544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/reallypride/comments/commentRss/227544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/reallypride/services/trackbacks/227544.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PureMVC，就如同它的名字是，它是一个纯粹的小巧的MVC框架。许多人都错误地把PureMVC误认为它是一个Flash的MVC框架或者是Flex的MVC框架。既然它是一个纯框架，那么，它就不仅仅是支持某种特定的语言，它的设计是与语言无关的。去过它的官网的人都看到，它支持了好多种常用的编程语言,下面是它的官网的一个支持的开发语言的截图：</p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/reallypride/EntryImages/20080907/puremvc.jpg" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;看到了上面的C#，学ASP.NET的人是不是看到了福音了？平时看到JSP有Struts，Hibernate，Spring等众多优秀的框架，而.NET的好像还没有，心里真是一百个的不爽，现在我们终于也有MVC框架了。虽然微软现在正在出一个ASP.NET MVC框架，但是它现在还是Preview5，也不知道什么时候才能出正式版，期待一下吧，微软出的东西应该是很容易使用的。不过，据说这个框架只支持.NET3.5的版本，如果真是这样的话，这是像我这种还在使用.NET2.0的人来说是一大的遗憾。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还有一点的是，这个框架和我上面提到过的JSP框架不同，它是一个真正的MVC框架，它不像Struts它们那样只支持Web应用的开发，虽然现在这种开发很流行。它只是一个框架，它是让我们更好的管理我们的程序，使得它易于维护，易于扩展和移植。它只是一个真正的MVC框架，它并不面向于特定的应用。我们可以使用它开发桌面应用，Web应用等等。同时，它还是一个轻量级的框架，而且还是很轻的那种，它的大小最多也就2，30K而已。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关于PureMVC的学习教程真的好少，找了好几天，结果还是只找到官网上的那个Best Practices。本人比较愚笨，研究了好几天，把那个文档看了又看，终于才明白了它大概的原理，现在写下来，分享一下心得。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PureMVC框架的目标很明确，即把程序分为低耦合的三层：Model、View和Controller。它们合称为PureMVC框架的核心，由Facade统一管理。关于它的核心层，我们不需要管太多，只需要记得下面几点就可以了：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一、Model保存对Proxy对象的引用，Proxy负责操作数据模型，与远程服务通信存取数据。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二、View保存对Mediator对象的引用。由Mediator对象来操作具体的视图组件（View Component，例如Flex的DataGrid组件），包括：添加事件监听器，发送或接收Notification ，直接改变视图组件的状态。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三、Controller保存所有Command的映射。Command可以获取Proxy对象并与之交互，通过发送Notification来执行其他的Command。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的什么对什么的引用，可以一开始看的时候很难理解，我们暂时不用管它谁对谁的引用的。这些已经由框架为我们管理好了，我们要所要做的是编写具体的Command，Mediator，Proxy。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一、Proxy是负责操作数据模型的，什么是数据模型？数据模型就是数据库，XML等等。我们可以直观地理解为，Proxy是用来对数据模型进行查询、插入、更新、删除等操作的类。操作完成后，它就会发送Notification，也就是通知，告诉其它两个层我已经完成工作了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二、Mediator负责操作具体的视图组件，包括：添加事件监听器，发送或接收Notification ，直接改变视图组件的状态。好像抽象了点。具体的说吧，Mediator是负责管理用户界面，与用户进行交互操作的。如：给Button添加事件，当用户点击按钮时，发送Notification，告诉Controler我们执行什么样的操作。比如这是一个登录的按钮，那么Mediator就会告诉发送通知给Controler，告诉它要执行登录操作。此外，Mediator还负责直接改变视图的状态。就像，我点击了登录按钮后，Mediator就改变它，让登录按钮不过用，避免重复操作。它还可以在视图上显示一条信息，告诉我正在执行登录操作。总的来说，Mediator是用来管理视图的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三、Command可以获取Proxy对象并与之交互，通过发送Notification来执行其他的Command。再拿上面的登录例子作解释，当点击了登录按钮后，Mediator就会告诉Controler要执行相应的Command了，比如LoginComand。既然是登录，那么还得要知道用户的信息才行。Command就会发送Notification告知Proxy，我需要某个用户的信息。那么Proxy就会访问数据库（也可以是别的数据模型），查询对应的用户信息，然后发送Notification通知Command我已经查询好了，差把信息返回给Command进行验证，与些同时，Mediator也可以接收Proxy发送的Notification，通过视图告诉用户正在验证信息。Command验证了用户信息后，发送Notification把验证结果返回给Mediatory，告诉用户验证的结果。或者，Command也可以发送Notification执行其它的Command操作，比如验证通过后，读取用户的详细资料。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的Command，Mediator，Proxy的具体实现类都是要自己编写的，工作量还是比较大的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PureMVC框架的原理大概就是这样子，写得不足的地方还请各位大虾多多指点。</p>
<img src ="http://www.blogjava.net/reallypride/aggbug/227544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/reallypride/" target="_blank">真的骄傲</a> 2008-09-07 15:06 <a href="http://www.blogjava.net/reallypride/archive/2008/09/07/227544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>