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. 重拾H5小游戏之入门篇(二)

    上一篇,水了近千字,很酸爽,同时表达了"重拾"一项旧本领并不容易,还有点题之效果.其实压缩起来就一句话:经过了一番记忆搜索,以及try..catch的尝试后,终于选定了Phaser ...

  2. 045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围

    045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围 本文知识点:for循环应用及局部变量作用范围 for循环 w ...

  3. 014 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 08 “字符型”字面值

    014 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 08 "字符型"字面值 字符型 字面值如何表示? 两个关键:单引号(必须是英文单引号). ...

  4. 笔记本电脑为什么有时候不用按FN+F1~12也可以控制音量、亮度全部等等

    对于经常要使用F1~F12的用户就很烦,比如编写前端代码的时候想直接按F12检查代码就是不行. 如何取消快捷键? 问题原因: 1.电脑默认使用了快捷键. 2.电脑按了FN+ESC锁定,只限于戴尔的电脑 ...

  5. OAuth 2.0 Server PHP实现示例

    需求实现三方OAuth2.0授权登录 使用OAuth服务OAuth 2.0 Server PHP 环境nginx mysqlphp 框架Yii 一 安装 项目目录下安装应用 composer.phar ...

  6. hdfs的JAVA必会操作

    hdfs的必会操作 创建目录 //创建目录 public static void mkdir(String filePath) throws URISyntaxException, IOExcepti ...

  7. day41 Pyhton 并发编程04

    内容回顾 socket 最底层的网络通信 所有的网络通信都是基于socket     进程 什么是进程? 是操作系统的发展过程中,为了提高cpu的利用率,在操作系统同时运行多个程序的时候,为了数据的安 ...

  8. python BeautifulSoup的使用方法

    BeautifulSoup的使用 我们学习了正则表达式的相关用法,但是一旦正则写的有问题,可能得到的就不是我们想要的结果了,而且对于一个网页来说,都有一定的特殊的结构和层级关系,而且很多标签都有id或 ...

  9. oh my zsh 安装

    date: "2020-10-18T12:36:00+08:00" title: "oh my zsh 安装" tags: ["zsh",& ...

  10. centos8平台使用ethtool配置网卡

    一,ethtool命令所属的包 [root@centos8 liuhongdi]# whereis ethtool ethtool: /usr/sbin/ethtool /usr/share/man/ ...