浅谈MVP
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的更多相关文章
- 浅谈 MVP in Android(转)
我自己写的demo:https://pan.baidu.com/s/1dFImVYD 一.概述 对于MVP(Model View Presenter),大多数人都能说出一二:“MVC的演化版本”,“让 ...
- 浅谈 MVP in Android
一.概述 对于MVP(Model View Presenter),大多数人都能说出一二:“MVC的演化版本”,“让Model和View完全解耦”等等.本篇博文仅是为了做下记录,提出一些自己的看法,和帮 ...
- 浅谈MVP架构及开发模式
Model-View-Presenter(MVP)概述 MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NET MVC Framework的出现,致使MVC一度成 ...
- 浅谈MVP设计模式
最近公司在做一个医疗项目,使用WinForm界面作为客户端交互界面.在整个客户端解决方案中.使用了MVP模式实现.由于之前没有接触过该设计模式,所以在项目完成到某个阶段时,将使用MVP的体会写在博客里 ...
- 浅谈MVC、MVP、MVVM
MVC M: Model 模型——数据 (对于前台而言例如:ajax.jsonp等从后台获取数据的) V: View 视图——表现 ...
- 浅谈MVVM模式和MVP模式——Vue.js向
浅谈MVVM模式和MVP模式--Vue.js向 传统前端开发的MVP模式 MVP开发模式的理解过程 首先代码分为三层: model层(数据层), presenter层(控制层/业务逻辑相关) view ...
- [原创]浅谈在创业公司对MVP的理解
[原创]浅谈在创业公司对MVP的理解 目前自已所处的公司类似一个创业平台,我们内部会不断的去孵化不同方向的产品,产品经理经常谈到的一个词就是MVP,所以有必需要去了解下什么是MVP? 1 什么是MVP ...
- Android开发-浅谈架构(二)
写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应 ...
- [原创]浅谈在创业公司对PMF的理解
[原创]浅谈在创业公司对PMF的理解 在创业时,大多数人都常谈一个词叫"MVP“,但PMF谈的比较少,PMF在创业公司尤为重要,以下谈谈个人一些看法. 1.什么是PMF? 创业公司:一种是找 ...
随机推荐
- 047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用
047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用 本文知识点:嵌套while循环应用 什么是循环嵌套? 什么是循环嵌套? ...
- vs调试程序缺少 msvcp140d.dll 解决方法
简介一下吧: 如果只是为了解决问题请直接看第 7 点 ,谢谢. vs2013运行刚安装的opencv问题总结,尤其是电脑还很渣的情况下------花了我起码2天样子----很无奈 ...
- Ubuntu常用工具安装
安装 aptitude 管理软件 $ sudo apt-get install aptitude 安装gdebi(安装deb包) # 安装: $ sudo apt install gdebi-core ...
- Spring Boot+Spring Security+JWT 实现 RESTful Api 认证(二)
Spring Boot+Spring Security+JWT 实现 RESTful Api 认证(二) 摘要 上一篇https://javaymw.com/post/59我们已经实现了基本的登录和t ...
- Windows Server 2003 蓝屏 -- 系统故障:停止错误
Windows Server 2003 EE 出现蓝屏: 0X0000004D (0X000f27D9, 0X000F27D9, 0X0000000C, 0X00000000) 蓝屏拍照: 重启机器 ...
- 一些IT service的相关知识
1. cmd是什么,怎么在电脑上打开cmd命令框. 在windows环境下,命令行程序为cmd.exe,是一个32位的命令行程序,微软Windows系统基于Windows上的命令解释程序,类似于微软的 ...
- [java进阶]关于多线程的知识点
线程和进程的区别? 进程: 是程序得一次之星过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个程序就是从一个进程的创建开始,到进程的结束的过程. 在java中当我们的main函数运行时就是 ...
- lora网关
lora网关 lora物联网网关ZLAN9743可以实现RS232/485/422/以太网转 LoRa功能 是一款高性价比远距离无线通讯网关.LoRa和GPRS.4G方案相比它无需入网月租费,和Wif ...
- spring boot:spring security实现oauth2授权认证(spring boot 2.3.3)
一,oauth2的用途? 1,什么是oauth2? OAuth2 是一个开放标准, 它允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像.照片.视频等), 在这个过程中无须将用户名和密码 ...
- swoole创建进程
<?php /** * Created by PhpStorm. * User: mac * Date: 2020/4/23 * Time: 21:57 */ use Swoole\Proces ...