无聊学习一下MVP这个概念
记录一下学习MVP,好处是便于替换前台页面(winfrom替换成asp.net),不改变页面逻辑层及其以后的层
M:业务逻辑
V:页面
P:页面逻辑 ,充当 页面和业务逻辑的中间层
规则:V和M不能直接接触,由P来做中间人
调用流程:V 去调用P,P去调用M,P调用M完成后,P调用V改变页面(这里为了保证P调用V不出错,使用了接口,规定V必须实现的方法)
建立四个库:
1 M :业务逻辑,可以用具体逻辑填充
2 V :页面,有自己的简单必要的代码逻辑,和调用P的代码 和 实现P规定的接口方法
3 P:页面逻辑,接到V的调用的代码,并调用M进行逻辑处理和调用V进行页面反馈
4 Models: 公用的实体类

V的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using P;
using Models; // 该命名空间下 存放页面类
namespace V
{
public partial class Form1 : Form, IPerson
{
private PersonLogic p;
public Form1()
{
InitializeComponent();
p = new PersonLogic(this);// 这行代码将MVP 中的V(页面)和P(页面逻辑)关联起来
} private void Form1_Load(object sender, EventArgs e)
{
p.ShowPersonListData();
} private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (e.IsSelected)
{
p.SelectedIndex(e.Item.Text);
}
} #region P要回调的方法 接口的实现 public void ShowMessage(string message)
{
MessageBox.Show(message);
} public void ShowPersonList(List<PersonModel> list)
{
foreach (var item in list)
{
ListViewItem c = listView1.Items.Add(item.Name);
c.SubItems.Add(item.Age.ToString());
}
} public void SelectName(string name, string age)
{
textBox1.Text = name;
textBox2.Text = age;
} #endregion
}
}
P的接口代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Models; namespace P
{
/// <summary>
/// 规定页面中要实现的方法 会在页面逻辑类中调用
/// </summary>
public interface IPerson
{
void ShowMessage(string message); void ShowPersonList(List<PersonModel> list); void SelectName(string name, string age); }
}
P的页面逻辑代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using M;
using Models; // 该命名空间下 存放 页面逻辑
namespace P
{
public class PersonLogic
{
private IPerson view;
PersonSevise sevice = new PersonSevise();
public PersonLogic(IPerson iView)
{
view = iView;
} public void ShowPersonListData()
{
view.ShowPersonList(sevice.list);
} public void SelectedIndex(string name)
{
PersonModel model = sevice.list.Where(M => M.Name == name).FirstOrDefault();
view.SelectName(model.Name, model.Age.ToString());
view.ShowMessage("选中了");
}
}
}
M的逻辑代码 (数据处理,读写数据库):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Models; // 该命名空间下 存放业务逻辑类 实际中 就数据库和代码逻辑
namespace M
{
public class PersonSevise
{
public List<PersonModel> list { get; set; }
public PersonSevise()
{
list = new List<PersonModel>();
list.Add(new PersonModel() { Name = "LXP1", Age = });
list.Add(new PersonModel() { Name = "LXP2", Age = });
list.Add(new PersonModel() { Name = "LXP3", Age = });
list.Add(new PersonModel() { Name = "LXP4", Age = });
list.Add(new PersonModel() { Name = "LXP5", Age = });
list.Add(new PersonModel() { Name = "LXP6", Age = });
list.Add(new PersonModel() { Name = "LXP7", Age = });
list.Add(new PersonModel() { Name = "LXP8", Age = });
list.Add(new PersonModel() { Name = "LXP9", Age = });
list.Add(new PersonModel() { Name = "LXP10", Age = }); } public void Add(PersonModel model)
{
list.Add(model);
}
public void Delete(PersonModel model)
{
list.Remove(list.Where(M => M.Equals(model)).FirstOrDefault());
}
}
}
Models实体类代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; // 该命名空间下存放模型实体类
namespace Models
{
public class PersonModel : IEquatable<PersonModel>
{
public string Name { get; set; }
public int Age { get; set; } public bool Equals(PersonModel other)
{
return this.Name == other.Name;
}
}
}
无聊学习一下MVP这个概念的更多相关文章
- Optaplanner逐步学习(0) : 基本概念 - Optaplanner,规划问题, 约束,方案
之前的文章中,分别从APS,排产到规划引擎叙述了一些理论基础:并介绍了一些Optaplanner大概的情况:并一步步将Optaplanner的示例运行起来,将示例源码导进Eclipse分析了一下它的H ...
- JavaScript:学习笔记(2)——基本概念与数据类型
JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...
- Linux 系统编程 学习:00-有关概念
Linux 系统编程 学习:00-有关概念 背景 系统编程其实就是利用系统中被支持的调度API进行开发的一个过程. 从这一讲开始,我们来介绍有关Linux 系统编程的学习. 知识 在进行Linux系统 ...
- java web学习总结(一) -------------------基本概念
一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源( ...
- Python新手学习基础之函数-概念与定义
什么是函数? 函数是可以实现一些特定功能的方法或是程序,简单的理解下函数的概念,就是你编写了一些语句,为了方便使用,把这些语句组合在一起,给它起一个名字,即函数名.使用的时候只要调用这个名字,就可以实 ...
- Elasticserach学习笔记-01基础概念
本文系本人根据官方文档的翻译,能力有限.水平一般,如果对想学习Elasticsearch的朋友有帮助,将是本人的莫大荣幸. 原文出处:https://www.elastic.co/guide/en/e ...
- es6学习笔记-class之一概念
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
- SpringMVC学习(一)——概念、流程图、源码简析
学习资料:开涛的<跟我学SpringMVC.pdf> 众所周知,springMVC是比较常用的web框架,通常整合spring使用.这里抛开spring,单纯的对springMVC做一下总 ...
- Python学习---模版/包的概念
1.1. 模块/包的概念 在Python中,一个.py文件就称之为一个模块(Module) 模块一共三种: python标准库 第三方模块 应用程序自定义模块 模块的使用:模块是用来组织函数的 解释器 ...
随机推荐
- 【学习笔记】BP神经网络
转自 huaweizte123的CSDN博客 链接 https://blog.csdn.net/huaweizte123/article/details/78803045 第一步.向前传播得到预测数 ...
- latex技巧:弧AB
\usepackage{yhmath} $\wideparen{ABCDEFG}$
- Cloud插件,链接oracle数据库
业务场景:客户需要在Cloud中获取第三方系统的数据,但是第三方系统的数据库是oracle,这是就需要连接oracle数据库获取数据了. 需要引用Oracle.ManagedDataAccess.dl ...
- 订阅消息---由于微信小程序取消模板消息,限只能开发订阅消息
订阅消息开发步骤: 1.小程序管理后台添加订阅消息的模板 2.小程序前端编写调用(拉起)订阅授权 wx.requestSubscribeMessage({ tmplIds: ['34fwe1211xx ...
- exe 发布为服务
参考连接: https://www.cnblogs.com/liuxiaoji/p/8016261.html 1.有两个文件 srvany.exe,instsrv.exe 然后放到指定的文件下下: 2 ...
- pandas玩转excel-> (2)如何利用pandas读取excel数据文件
import pandas as pd #将excel文件读到内存中,形成dataframe,并命名为peoplepeople=pd.read_excel('D:/python结果/task2/Peo ...
- JS添加和删除表格行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- python笔记07
今日内容 深浅拷贝(面试) 文件操作 今日内容 深浅拷贝 v1=[1,2,[34,67,9]] import copy 浅拷贝: 拷贝第一层 v2=copy(v1)---将v1的地址copy,最外层壳 ...
- day03_1spring3
事务管理的几种方式.spring整合Junit.spring整合web.ssh整合 一.事务管理的几种方式: 1.介绍前提我们需要导入:spring-tx-3.2.0.RELEASE.jar的包里面含 ...
- [0CTF 2016]piapiapia{PHP反序列化漏洞(PHP对象注入)}
先上学习链接: https://www.freebuf.com/column/202607.html https://www.cnblogs.com/ichunqiu/p/10484832.html ...