笔者在前文 《MVP和MVC》中提到了两者的区别,以及MVP日趋流行的原因:即随着各种给力UI框架的发布,View的功能越来越强,已经足以完成一些简单的不需要与后台或其他view交互的event handling工作。
一位.NET工程师在他的博客写了MVP的14条规则,个人感觉十分靠谱,所以转载过来,并稍注翻译。
14条具体规则之前,他提到了一些MVP设计的基本共识,比如View必须实现Display接口,Display接口定义了View里面与Presenter交互的所有方法,通过Display的存在,View和Presenter得到完美的解耦,使得架构变得清晰,也为Presenter代码的测试带来极大的便利。View永远不直接调用任何其他模块或者服务,只专注于本身UI细节的实现,以及简单的不涉及与其他模块或服务交互的event处理。如果View需要Presenter提供数据或服务,则必须使用event。
1. All views should have a XxxView suffix: TaskView/ITaskView
2. All presenters should have a XxxPresenter suffix: TaskViewPresenter
3. Let the presenter do all use-case processing, but keep GUI control details in the view
让presenter处理所有的逻辑,把所有GUI以及GUI上控件反应的细节定义在view里面
4. All presenter methods called by the view must start with OnXxx() as they are events by design (MVP)
5. Calls from the view to the presenter should be kept at an absolute minimum, and used for "event" type calls only: _presenter.OnViewReady();
View对于Presenter的调用应该尽量少(应该尽量避免)
6. It is FORBIDDEN to use the presenter reference to access the model or services directly, no return values from presenter methods
禁止使用Presenter引用直接调用model或者服务,Presenter中定义的方法应该都没有返回值
7. Calls from the presenter to the view MUST go via the interface only
Presenter中调用View必须通过View的接口进行(View必须继承自接口,且View中可能被Presenter调用到的方法都要定义在这个接口中,Presenter中禁止出现View)
8. No methods in the view shall be public unless they are defined in the interface
View除了已经定义在Display(View的接口)以外的所有方法都应该是私有的(如果不能定义为私有,即Presenter可能要调用,那就应该定义到Display中,这一点和第7条相互印证)
9. It is FORBIDDEN to access the view from anywhere but the presenter, except for loading and showing the view from the CAB ModuleController
禁止从Presenter以外的任何地方调用View(即只有Presenter可以调用View/Display)
10. The interface methods shall have long meaningful names (not "SetDataSource") based on the domain language of the use-case
Display(View的接口)中定义的方法应该使用有具体意义的命名
11. The interface should contain methods only, no properties - afterall the presenter drives the use-case by calling methods, not by setting data
Display中应该只包含方法,不包含属性变量
12. All data in the MVP component should be kept in the model, no data should exist only as properties of UI controls
MVP模式中所有的数据都应该以model的形式出现,除此以外不应该有数据仅以UI属性变量的形式出现
13. The methods of the view interface should not contain UI control name references (e.g. AddExplorerBarGroup) as this makes the presenter know too much about the implementation technology
of the view
Display中的方法不应该包含UI空间的名称,比如AddExplorerBarGroup,因为这样的方法名称会使得Presenter知道View里面的具体实现(这条感觉有点太牵强,不过注重细节才专业,才写得出完美的代码)
14. Stick with domain naming in the view methods (e.g. AddTaskGroupHeader), this makes the code easier to understand and the tests self-describing
View里面定义的方法同样应该有具体的意义,应该和这个方法中涉及到的UI空间或者相应的model名称结合起来
笔者补充几点,View和Presenter是单向的操作,View对Presenter一无所知,Presenter对其他的Presenter几乎一无所知,Presenter之间通过各种各样的event和event handler进行数据交互和服务调用。好的UI系统,所有涉及到2个或2个以上Presenter参与的数据或服务交互都必须由A方发出event,B方注册event
handler来接收并处理,如果需要返回数据,则B方发出另一个event,A方注册该event的handler,诸如此类。
分享到:
相关推荐
ASP.NET MVP模式是一种常见的软件设计模式,用于构建可维护性和测试性更强的Web应用程序。MVP代表Model-View-Presenter,它将用户界面(View)与业务逻辑(Model)分离,通过Presenter作为中介进行交互。在ASP.NET...
C# MVP模式,即Model-View-Presenter模式,是一种软件设计模式,主要应用于用户界面的开发,特别是在ASP.NET和WinForms等环境中。这种模式将业务逻辑、数据模型和用户界面进行解耦,使得代码更易于测试和维护。下面...
在MVP模式中,模型通常负责数据的获取、存储和业务规则的执行。在Winform应用中,模型可能包含对数据库的访问、网络请求或其他后台服务的交互。模型应当独立于视图和呈现者,确保任何更改不会直接影响到用户界面。 ...
**MVP设计模式详解** MVP(Model-View-Presenter)设计模式是...通过学习这个实例,初学者可以了解如何在实际项目中应用MVP模式,理解各组件的角色以及如何通过委托进行通信,从而更好地设计和构建可维护的软件系统。
MVP模式将业务逻辑、数据处理和用户界面职责分离,使得代码结构清晰,测试更加方便。 **Model(模型)** 模型层是应用中的核心业务逻辑和数据存储部分。它不关心视图或者呈现者如何使用这些数据,只是负责处理数据...
** MVP模式详解 ** MVP(Model-View-Presenter)模式是一种软件设计模式,尤其在Android应用开发中广泛应用。这个模式旨在分离用户界面(View)的逻辑与数据处理(Model),并通过一个中间层(Presenter)进行通信...
**MVP模式的理解** MVP(Model-View-Presenter)模式是软件开发中的一种设计模式,主要用于Android和Web应用中,以实现清晰的代码结构和提高可测试性。MVP模式是MVC(Model-View-Controller)模式的一个变种,它在...
在MVP模式中: 1. **Model(模型层)**:负责处理数据和业务逻辑,它通常包含数据的获取、存储和业务规则的执行。Model与数据源交互,如数据库、网络API等,确保数据的正确性和完整性。 2. **View(视图层)**:...
MVP模式是MVC(模型-视图-控制器)模式的一种变体,尤其适用于桌面应用开发。在这个模式中,视图、模型和呈现者(Presenter)之间有明确的职责分工。 **视图(View)**:它是用户界面,负责显示数据和接收用户的...
MVP(Model-View-Presenter)模式是一种...总之,MVP模式是一种实用的设计模式,尤其适用于需要高度组织和可测试性的应用程序,例如登录功能。通过理解和掌握MVP模式,开发者可以创建出更易于维护、扩展和测试的代码。
**MVP模式详解** 1. **Model层**:这是业务逻辑和数据处理的层,它不直接与视图交互,而是通过Presenter传递数据。在登录场景中,Model负责获取或验证用户输入的用户名和密码,可能涉及到网络请求、数据库查询等...
首先,我们来看MVP模式的核心思想。在MVP中,Model代表数据模型,负责与数据源交互;View是用户界面,负责展示数据和接收用户输入;Presenter作为两者之间的桥梁,处理业务逻辑并协调Model和View的通信。Presenter...
MVP模式将应用程序的组件分为三个主要部分:Model(模型)、View(视图)和Presenter(呈现器)。 **1. Model(模型)** 模型层是应用的核心业务逻辑部分,它处理数据和业务规则。在Android开发中,Model通常与...
MVP模式是MVC(Model-View-Controller)模式的一种演变,它将Controller替换为Presenter,使得Model与View之间的交互更加间接,降低了耦合度。 **MVP模式的核心概念:** 1. **Model(模型)**:这部分负责处理应用...
**Android中的MVP模式** MVP(Model-View-Presenter)模式是一种软件设计模式,尤其在Android开发中被广泛采用,以实现清晰的代码结构和更好的可测试性。MVP帮助开发者将业务逻辑、用户界面和数据处理分离,使得...
**MVP模式概述** MVP全称为Model-View-Presenter,是一种设计模式,用于分离应用程序的业务逻辑、用户界面和数据模型。它的核心理念是将视图(View)、模型(Model)和呈现器(Presenter)三者职责明确划分,使代码...
在Android开发中,MVP(Model-View-Presenter)架构模式、Retrofit网络库和RxAndroid库是常见的组合,它们可以有效地提升应用的可维护性和性能。本篇将详细讲解这三个技术的使用方法及其结合应用。 **MVP架构模式**...
MVP模式是Model-View-Presenter模式的缩写,是一种软件设计模式,广泛应用于用户界面的开发。在MVP模式中: 1. **Model**(模型):负责处理业务逻辑和数据,与数据库交互,更新数据。 2. **View**(视图):显示...