`
flysnail
  • 浏览: 92804 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MVP在 Flex中的应用

    博客分类:
  • Flex
阅读更多

关于MVP是MVC的另一种模式,在MVP模式中视图和模型是完全分离的,他们通过Presenter进行交互。
Presenter与控制器非常相似,但是它们也有一些的区别:
1、Presenter处理视图发送过来的用户操作(在MVC中视图自己处理了这些操作)
2、它用更新过的数据去更新模型(在被动MVC中控制器只是通知视图去更新过的模型中去取新的数据,而主动MVC中模型通知视图去更新显示,控制器不需要做工作)
3、检查模型的更新(与被动MVC一样)
4、(与MVC的主要区别)从模型中取数据然后将它们发送到视图中
5、(与MVC的主要区别)将所做的更新告知视图
6、(与MVC的区别)用Presenter渲染视图

其图如下:


MVP的优势:
1、模型与视图完全分离,我们可以修改视图而不影响模型
2、可以更高效地使用模型,因为所以的交互都发生在一个地方——Presenter内部
3、我们可以将一个Presener用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。
下面是Flex 的MVP实现 

package com.vniu.view
{
 public interface IUserView{
  
  function set userName(value:String):void;
  function set lastName(value:String):void;
  function set city(value:String):void;
  function set errorMessage(value:String):void;
  
  function get searchCriteria():String;
  
  
 }
}
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="350" height="200" implements="com.vniu.view.IUserView" creationComplete="init()"
		 backgroundColor="#A0D2FD" backgroundAlpha="0.5">
	
	<mx:Script>
		<![CDATA[
			
			import com.vniu.presenter.UserViewPresenter;
			
			private var _presenter:UserViewPresenter;
			
			private function init():void{
				
				_presenter = new UserViewPresenter(this);
				
			}
			
			public function set userName(value:String):void{
				
				_userName.text = value;
				
			}
			
			public function set lastName(value:String):void{
				
				_lastName.text = value;
				
			}
			
			public function set city(value:String):void{
				
				_city.text = value;
				
			}
			
			public function get searchCriteria():String{
				
				return _searchCriteria.text;
				
			}
			
			public function set errorMessage(value:String):void{
				
				_errorMessage.text = value;
				_errorMessage.visible = value != "";
				
			}
			
		]]>
	</mx:Script>
	
	<mx:Label text="Contact Details Manager" width="100%" fontWeight="bold"/>
	<mx:Label id="_errorMessage"  width="100%" color="#FF0006"/>
	
	<mx:Form width="100%" height="50%">
		<mx:FormItem label="Name" width="100%">
			<mx:TextInput id="_userName" editable="false" width="100%"/>
		</mx:FormItem>
		<mx:FormItem label="Surname" width="100%">
			<mx:TextInput id="_lastName" editable="false" width="100%"/>
		</mx:FormItem>
		<mx:FormItem label="City" width="100%">
			<mx:TextInput id="_city" editable="false" width="100%"/>
		</mx:FormItem>					
	</mx:Form>
	<mx:HBox width="100%">
		<mx:Label text="Insert a code to search" />
		<mx:TextInput width="120" id="_searchCriteria" restrict="0-9" />
		<mx:Button label="search" click="_presenter.recoverData()" />
	</mx:HBox>
</mx:VBox>

 

package com.vniu.presenter
{
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	
	import com.vniu.view.IUserView;
	
	public class UserViewPresenter{
		
		private var _view:IUserView;
		private var _xdata:XML;
		
		private const DATA_FILE:String = "data/users.xml";
		
		public function UserViewPresenter(view:IUserView)	{
			
			_view = view;
			
			var url:URLRequest = new URLRequest(DATA_FILE);
			
			var loader:URLLoader = new URLLoader();
			loader.addEventListener(Event.COMPLETE, onDataRead);
			
			loader.load(url);
			
		}
		
		private function onDataRead(e:Event):void{
			
			_xdata = XML(e.target.data);
			
		}
		
		public function recoverData():void{
			
			if(_view.searchCriteria == ""){
				
				_view.errorMessage = "Insert a code please!";
				
			}else{
				
				var data:XMLList = _xdata.customer.(@code == _view.searchCriteria);
				
				if(data.length() == 0){
					
					_view.errorMessage = "No user found!";
					
					_view.userName = "";
					_view.lastName = "";
					_view.city = "";
					
				}else{
					
					_view.userName = data.firstName.text();
					_view.lastName = data.lastName.text();
					_view.city = data.city.text();
					
					_view.errorMessage = "";
					
				}
				
				
				
			}
			
		}

	}
}

 

  • 大小: 15.1 KB
0
0
分享到:
评论

相关推荐

    FLEX 下的MVP应用 以及 ColdFusion 的远程服务调用

    在Flex应用中,Model负责处理数据和业务逻辑,不直接与用户交互;View是用户看到和操作的部分,它通常与Presenter绑定;Presenter作为中间人,接收来自View的事件,处理它们并更新Model,同时监听Model的变化并通知...

    FLEX入门教程 包括基础 进阶 企业开发实践

    3. **状态管理**:Flex允许为不同的应用场景定义不同状态,如设计模式中的 MVP 或 MVC。理解和应用状态管理机制,可以更好地组织代码和优化用户体验。 4. **动画和效果**:利用Flex的动画API,可以创建丰富的视觉...

    wrox的《flex高级编程》源代码

    7. **Chapter 22** - 可能会讨论性能优化和调试技巧,例如如何减少组件的渲染开销,使用Profiler工具定位性能瓶颈,以及如何调试Flex应用。 8. **Chapter 8** - 可能涵盖Flex的组件体系结构,包括标准组件的使用、...

    SA 第3章 作业41

    《软件体系结构与设计》第三章的作业主要探讨了软件体系结构风格,特别是针对B/S...无论是改进传统的B/S架构,还是在具体应用中选择合适的架构模式,都需要充分理解各种架构风格的特性,以便根据项目需求做出最佳决策。

    Android应用开发揭秘14

    在“Android应用开发揭秘14”这一主题中,我们聚焦于深入探讨Android应用程序的构建、优化和调试技术。这篇博客文章可能涵盖了多个关键知识点,包括但不限于Android应用的架构设计、源码分析、开发者工具的使用等...

    前端大厂最新面试题-面试记录流水记录.docx

    MVP 模式将应用程序分为三层:Model 层、View 层和 Presenter 层。Model 层负责业务逻辑,View 层负责用户界面,Presenter 层负责业务逻辑和用户界面之间的交互。 Vue 组件间通信 Vue 组件间通信是前端开发中的一...

    android面试题集锦

    - 理解AsyncTask、Thread、Handler、Looper在异步处理中的应用。 - 掌握使用OkHttp或Volley进行网络请求,理解网络请求的生命周期和缓存策略。 - 熟悉JSON解析,如Gson、Jackson或FastJson库的使用。 5. **性能...

    一恩学姐面试资料锦囊.zip

    8. **热修复和插件化**:理解其原理并了解如何应用到实际项目中,如Facebook的FLEX、阿里巴巴的AndFix。 9. **最新技术趋势**:了解Kotlin语言特性,学习Jetpack组件,了解Android Jetpack Compose进行UI开发,掌握...

    flipt:图书共享应用

    flipt背后的想法是利用每个人都在家中存储的书籍,并将它们纳入更大的公共图书馆中。 该应用程序将允许用户将自己拥有的书籍借给周围的其他读者,以及签出他们有兴趣阅读的书籍。 Flipt的目的是清除存储在那些书架...

    android面试题大全

    以下是一些关键的Android面试知识点,它们可能会在面试中被问到: 1. **Android体系结构**:理解Android系统的层次结构,包括Linux内核、硬件抽象层(HAL)、系统库、应用程序框架以及应用程序。 2. **Activity...

    e-Commerce:使用react-scroll的单个响应式页面站点

    电子商务 概述 电子商务网站的概念演示,以展示我的React能力和改进的样式化组件布局。 最有价值球员 ... 使用平滑滚动时,每个组件都不会在视口中居中。 会在另一个迭代中修复该问题 MVP后: 创建页脚节

    58同城最新秋招前端笔试试题.docx

    '10'-1 结果为 9,因为JavaScript在减法操作中会自动将字符串'10'转换为数字10。 6. ES6字符串模板:使用`${ting} 室 ${shi} 厅 ${wei} 卫`可以将变量插入到字符串中,形成1室3厅2卫的格式。 7. ES6解构赋值:`let...

    Getting Real

    同时,书中还介绍了“Fix Time and Budget, Flex Scope”(固定时间和预算,灵活调整范围)的策略,意味着在有限的时间和资金下,应该灵活调整项目的范围,确保能够按时交付一个最小可行的产品(MVP),再逐步完善。...

    一些前端面试题.pdf

    1. **`&lt;article&gt;`**: 用于表示文档、页面或者应用程序中的独立部分,这部分可以被独立分发或复用。例如,一篇博客文章、一个新闻报道或者论坛帖子。 2. **`&lt;section&gt;`**: 代表文档中的一个独立区域,通常用来组织...

    vue面试题(二).docx

    - **应用**:在`main.js`中安装,并在组件中使用`this.$store`访问状态。 20. **axios与ajax**:axios是基于Promise的HTTP库,相比jQuery的ajax更现代,支持Promise API,兼容Promise.all和catch。 21. **同源...

    Deconstructed-MERN-

    -FLEX工程师 后端工程师 前端工程师 看看我们在Heroku上托管的 ! 背景和概述 Deconstructed是一个交互式Web应用程序,可让用户与正在收集的数据进行互动,并使其能够控制自己的数据。 用户可以提交匿名测验以开始...

    常见的前端开发面试题附答案经典精选汇总大全.docx

    BFC 有助于解决重叠问题,防止元素塌陷,并在布局中提供更好的控制。 以上是前端开发面试中常见的知识点,包括网络请求流程、性能优化策略、前端框架的作用、盒模型的理解、cookie 的优缺点、浏览器本地存储的使用...

Global site tag (gtag.js) - Google Analytics