关于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
分享到:
相关推荐
在Flex应用中,Model负责处理数据和业务逻辑,不直接与用户交互;View是用户看到和操作的部分,它通常与Presenter绑定;Presenter作为中间人,接收来自View的事件,处理它们并更新Model,同时监听Model的变化并通知...
3. **状态管理**:Flex允许为不同的应用场景定义不同状态,如设计模式中的 MVP 或 MVC。理解和应用状态管理机制,可以更好地组织代码和优化用户体验。 4. **动画和效果**:利用Flex的动画API,可以创建丰富的视觉...
7. **Chapter 22** - 可能会讨论性能优化和调试技巧,例如如何减少组件的渲染开销,使用Profiler工具定位性能瓶颈,以及如何调试Flex应用。 8. **Chapter 8** - 可能涵盖Flex的组件体系结构,包括标准组件的使用、...
《软件体系结构与设计》第三章的作业主要探讨了软件体系结构风格,特别是针对B/S...无论是改进传统的B/S架构,还是在具体应用中选择合适的架构模式,都需要充分理解各种架构风格的特性,以便根据项目需求做出最佳决策。
在“Android应用开发揭秘14”这一主题中,我们聚焦于深入探讨Android应用程序的构建、优化和调试技术。这篇博客文章可能涵盖了多个关键知识点,包括但不限于Android应用的架构设计、源码分析、开发者工具的使用等...
MVP 模式将应用程序分为三层:Model 层、View 层和 Presenter 层。Model 层负责业务逻辑,View 层负责用户界面,Presenter 层负责业务逻辑和用户界面之间的交互。 Vue 组件间通信 Vue 组件间通信是前端开发中的一...
- 理解AsyncTask、Thread、Handler、Looper在异步处理中的应用。 - 掌握使用OkHttp或Volley进行网络请求,理解网络请求的生命周期和缓存策略。 - 熟悉JSON解析,如Gson、Jackson或FastJson库的使用。 5. **性能...
8. **热修复和插件化**:理解其原理并了解如何应用到实际项目中,如Facebook的FLEX、阿里巴巴的AndFix。 9. **最新技术趋势**:了解Kotlin语言特性,学习Jetpack组件,了解Android Jetpack Compose进行UI开发,掌握...
flipt背后的想法是利用每个人都在家中存储的书籍,并将它们纳入更大的公共图书馆中。 该应用程序将允许用户将自己拥有的书籍借给周围的其他读者,以及签出他们有兴趣阅读的书籍。 Flipt的目的是清除存储在那些书架...
以下是一些关键的Android面试知识点,它们可能会在面试中被问到: 1. **Android体系结构**:理解Android系统的层次结构,包括Linux内核、硬件抽象层(HAL)、系统库、应用程序框架以及应用程序。 2. **Activity...
电子商务 概述 电子商务网站的概念演示,以展示我的React能力和改进的样式化组件布局。 最有价值球员 ... 使用平滑滚动时,每个组件都不会在视口中居中。 会在另一个迭代中修复该问题 MVP后: 创建页脚节
'10'-1 结果为 9,因为JavaScript在减法操作中会自动将字符串'10'转换为数字10。 6. ES6字符串模板:使用`${ting} 室 ${shi} 厅 ${wei} 卫`可以将变量插入到字符串中,形成1室3厅2卫的格式。 7. ES6解构赋值:`let...
同时,书中还介绍了“Fix Time and Budget, Flex Scope”(固定时间和预算,灵活调整范围)的策略,意味着在有限的时间和资金下,应该灵活调整项目的范围,确保能够按时交付一个最小可行的产品(MVP),再逐步完善。...
1. **`<article>`**: 用于表示文档、页面或者应用程序中的独立部分,这部分可以被独立分发或复用。例如,一篇博客文章、一个新闻报道或者论坛帖子。 2. **`<section>`**: 代表文档中的一个独立区域,通常用来组织...
- **应用**:在`main.js`中安装,并在组件中使用`this.$store`访问状态。 20. **axios与ajax**:axios是基于Promise的HTTP库,相比jQuery的ajax更现代,支持Promise API,兼容Promise.all和catch。 21. **同源...
-FLEX工程师 后端工程师 前端工程师 看看我们在Heroku上托管的 ! 背景和概述 Deconstructed是一个交互式Web应用程序,可让用户与正在收集的数据进行互动,并使其能够控制自己的数据。 用户可以提交匿名测验以开始...
BFC 有助于解决重叠问题,防止元素塌陷,并在布局中提供更好的控制。 以上是前端开发面试中常见的知识点,包括网络请求流程、性能优化策略、前端框架的作用、盒模型的理解、cookie 的优缺点、浏览器本地存储的使用...