MVP是什么

MVP:Model-View-Presenter
Model:表示数据提供者;View:表示数据展示;Presenter:是M与V沟通的桥梁。

MVP工作方式

UI:告知Presenter需要怎样的数据(调用方法)
Presenter:调用对应的业务方法获取数据(调用业务方法),并主动通知UI(调用UI接口方法,或者触发UI事件)
使UI与数据业务数据层解耦
将UI抽象成接口,面向接口实现

代码示例

1、定义View的接口:

 1 public delegate void BindDataHandler(object sender, List<string> data);
2 /// <summary>
3 ///
4 /// </summary>
5 public interface IMainView
6 {
7 /// <summary>
8 /// 绑定数据事件
9 /// </summary>
10 BindDataHandler BindDataEvent { get; } //声明事件,此由Presenter触发,可以用于UI中事件传递。例如用户控件中的传递
11 /// <summary>
12 /// 通知更新结果
13 /// </summary>
14 /// <param name="flag"></param>
15 /// <param name="message"></param>
16 void NotifyUpdateResult(bool flag, string message);
17 }

2、定义对应View的Presenter

 1 /// <summary>
2 /// MainView Presenter
3 /// </summary>
4 public class MainPresenter
5 {
6 /// <summary>
7 ///
8 /// </summary>
9 public IMainView MainView { get; set; }
10 /// <summary>
11 ///
12 /// </summary>
13 /// <returns></returns>
14 public void Query()
15 {
16 //TODO调用业务层去查询数据
17 List<string> strList = new List<string>()
18 {
19 "a","b","c"
20 };
21 if (MainView.BindDataEvent != null)
22 {
23 MainView.BindDataEvent(null, strList);
24 }
25 }
26 }

3、定义View基类

 1     /// <summary>
2 /// BaseView
3 /// </summary>
4 /// <typeparam name="T"></typeparam>
5 public class BaseView<T> :Form where T : class,new()
6 {
7 public T presenter;
8 /// <summary>
9 ///
10 /// </summary>
11 public BaseView()
12 {
13 Type type = typeof(T);
14 presenter = Activator.CreateInstance(type) as T;
15 }
16 /// <summary>
17 ///
18 /// </summary>
19 public T Presenter
20 {
21 get { return presenter; }
22 }
23 }

4、定义实际的View

 1  public partial class FrmMainView : BaseView<MainPresenter>, IMainView
2 {
3 public FrmMainView()
4 {
5 InitializeComponent();
6 presenter.MainView = this;
7 this.bindDataEvent += Presenter_BildDataHander;
8 }
9
10 void Presenter_BildDataHander(object sender, List<string> data)
11 {
12 //TODO绑定数据(此处仅是示例,其实应该用方法不用事件)
13 this.dgvData.DataSource = data;
14 }
15
16 private void tsbQuery_Click(object sender, EventArgs e)
17 {
18 //TODO构造查询条件,调用方法查询
19 this.Presenter.Query();
20 }
21
22 private BindDataHandler bindDataEvent;
23 public BindDataHandler BindDataEvent
24 {
25 get
26 {
27 return bindDataEvent;
28 }
29 }
30 /// <summary>
31 ///
32 /// </summary>
33 /// <param name="flag"></param>
34 /// <param name="message"></param>
35 public void NotifyUpdateResult(bool flag,string message)
36 {
37 if (flag)
38 {
39 MessageBox.Show("更新成功");
40 }
41 else
42 {
43 MessageBox.Show("更新失败 "+message);
44 }
45 }
46 }

浅谈MVP的更多相关文章

  1. 浅谈 MVP in Android(转)

    我自己写的demo:https://pan.baidu.com/s/1dFImVYD 一.概述 对于MVP(Model View Presenter),大多数人都能说出一二:“MVC的演化版本”,“让 ...

  2. 浅谈 MVP in Android

    一.概述 对于MVP(Model View Presenter),大多数人都能说出一二:“MVC的演化版本”,“让Model和View完全解耦”等等.本篇博文仅是为了做下记录,提出一些自己的看法,和帮 ...

  3. 浅谈MVP架构及开发模式

    Model-View-Presenter(MVP)概述    MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NET MVC Framework的出现,致使MVC一度成 ...

  4. 浅谈MVP设计模式

    最近公司在做一个医疗项目,使用WinForm界面作为客户端交互界面.在整个客户端解决方案中.使用了MVP模式实现.由于之前没有接触过该设计模式,所以在项目完成到某个阶段时,将使用MVP的体会写在博客里 ...

  5. 浅谈MVC、MVP、MVVM

    MVC M: Model            模型——数据            (对于前台而言例如:ajax.jsonp等从后台获取数据的) V:  View             视图——表现 ...

  6. 浅谈MVVM模式和MVP模式——Vue.js向

    浅谈MVVM模式和MVP模式--Vue.js向 传统前端开发的MVP模式 MVP开发模式的理解过程 首先代码分为三层: model层(数据层), presenter层(控制层/业务逻辑相关) view ...

  7. [原创]浅谈在创业公司对MVP的理解

    [原创]浅谈在创业公司对MVP的理解 目前自已所处的公司类似一个创业平台,我们内部会不断的去孵化不同方向的产品,产品经理经常谈到的一个词就是MVP,所以有必需要去了解下什么是MVP? 1 什么是MVP ...

  8. Android开发-浅谈架构(二)

    写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...

  9. [原创]浅谈在创业公司对PMF的理解

    [原创]浅谈在创业公司对PMF的理解 在创业时,大多数人都常谈一个词叫"MVP“,但PMF谈的比较少,PMF在创业公司尤为重要,以下谈谈个人一些看法. 1.什么是PMF? 创业公司:一种是找 ...

随机推荐

  1. LRC 滚动器 + Vue.js

    LRC 滚动展示VueJS cnblogs @ Orcim  最 近一直在学习尤大大的这个前端框架.Vue 无疑是一款极易上手的前端框架,因为官方的文档就是中文的,十分"本土化", ...

  2. CF538B Quasi Binary 思维题

    题目描述 给出一个数 \(n\),你需要将 \(n\) 写成若干个数的和,其中每个数的十进制表示中仅包含\(0\)和\(1\). 问最少需要多少个数 输入输出格式 输入格式: 一行 一个数 \(n(1 ...

  3. Unity Shader 00 - 梳理 Unity Shader 的基本结构

    0x00 写在前面 之前一直在阅读 The Book of Shaders 一书,为什么会开始写 Unity Shader 呢?一方面,因为该书目前尚未完结,写下此文时已阅读到该书的最新章节:另一方面 ...

  4. 041 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 03 案例演示while循环的使用——求1到5的累加和

    041 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 03 案例演示while循环的使用--求1到5的累加和 本文知识点:案例演示while循环的使用1 ...

  5. Java知识系统回顾整理01基础03变量08表达式

    一.以 ; 结尾的一段代码,即为一个表达式 表达式是由变量.操作符以及方法调用所构成的结构.如下所示: int i = 5; System.out.println(5); 都是表达式 public c ...

  6. java的string方法使用

    1.将list转换为","隔开的字符串 //videoIdList值转换成 1,2,3 String videoIds = StringUtils.join(videoIdList ...

  7. 使用MVC 5、Web API 2、KnockoutJS、Ninject和NUnit开发、架构和测试Web应用程序

    做一名微软软件开发人员就像在国际煎饼屋订早餐一样.每道菜都有一堆煎饼,你必须从各种各样的煎饼和糖浆口味中选择.对于web应用程序,解决方案堆栈是一组软件子系统或组件,用于交付功能完整的解决方案(无论是 ...

  8. devops-jenkins-Pipeline基础语法

    1. jenkins-Pipeline基础语法  1) jenkins-Pipeline总体介绍 • Pipeline,简而言之,就是一套运行与jenkins上的工作流框架,将原本独立运行于单个或多个 ...

  9. Jersey实现跨服务器上传图片:UniformInterfaceException:403 Forbidden

    jersey.api.client.UniformInterfaceException :returned a response status of 403 Forbidden 图片服务器:端口808 ...

  10. Django基础之Ajax

    知识预览 Ajax前戏:json Ajax简介 Jquery实现的ajax JS实现的ajax Ajax前戏:json 什么是json? 定义: JSON(JavaScript Object Nota ...