浅谈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? 创业公司:一种是找 ...
随机推荐
- 068 01 Android 零基础入门 01 Java基础语法 08 Java方法 06 参数传递问题——基本数据类型传值
068 01 Android 零基础入门 01 Java基础语法 08 Java方法 06 参数传递问题--基本数据类型传值 本文知识点:参数传递问题--基本数据类型传值 说明:因为时间紧张,本人写博 ...
- C++(VS2015)模板显式特化之template语法深入理解
首先说下遇到的情况: 这里在vc++6.0上建立了一个自定义模板类,再去覆盖这个类,分别使用部分覆盖,整体覆盖 但在vs2015上去整体覆盖类会报错. 错误如下: 错误原因:个人感觉是新版本的vs更接 ...
- 【题解】[USACO12MAR]Cows in a Skyscraper G
题目链接 题目大意:给定一个集合\(S\),给一个限制条件\(P\),要求划分集合,使得每一个子集\(A\in S\),\(A\)满足限制条件\(P\),且划分总数最小. 注意到数据范围\(n< ...
- 一个Java对象的内存布局
1.对象的创建过程 class loading class linking(verification,preparation,resolution) class initializing 申请对象内存 ...
- 唯品会Java开发手册》1.0.2版阅读
<唯品会Java开发手册>1.0.2版阅读 1. 概述 <阿里巴巴Java开发手册>,是首个对外公布的企业级Java开发手册,对整个业界都有重要的意义. 我们结合唯品会的内部经 ...
- Fabric1.4.4 多机solo共识搭建
简单记录一下fabric版本1.4.4的搭建部署,运行环境为CentOs7.8,如有错误欢迎批评指正.然后就是本编文章不对环境搭建做说明,基础环境搭建看这里. 1.总体设计 本案例部署一个排序(ord ...
- Java 8 有多牛逼?打破一切你对接口的认知!
前段时间面试了一个 39 岁的程序员,结果不是很理想,没看过的点击这里阅读. 最近也面试一些 Java 程序员,不乏工作 4.5 年经验的,当我问他一些 Java 8 的新特性时,大多却答不上来. 比 ...
- python 使用pyinstaller打包程序
使用pyinstaller 打包.py脚本,在其他计算机可以直接运行,不需要python环境 安装pyinstaller库 pip install pystaller 打包程序 pyinstaller ...
- gorm学习地址
1 gorm curd指南 2 gorm入门指南
- spring boot:给接口增加签名验证(spring boot 2.3.1)
一,为什么要给接口做签名验证? 1,app客户端在与服务端通信时,通常都是以接口的形式实现, 这种形式的安全方面有可能出现以下问题: 被非法访问(例如:发短信的接口通常会被利用来垃圾短信) 被重复访问 ...