记录一下学习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这个概念的更多相关文章

  1. Optaplanner逐步学习(0) : 基本概念 - Optaplanner,规划问题, 约束,方案

    之前的文章中,分别从APS,排产到规划引擎叙述了一些理论基础:并介绍了一些Optaplanner大概的情况:并一步步将Optaplanner的示例运行起来,将示例源码导进Eclipse分析了一下它的H ...

  2. JavaScript:学习笔记(2)——基本概念与数据类型

    JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...

  3. Linux 系统编程 学习:00-有关概念

    Linux 系统编程 学习:00-有关概念 背景 系统编程其实就是利用系统中被支持的调度API进行开发的一个过程. 从这一讲开始,我们来介绍有关Linux 系统编程的学习. 知识 在进行Linux系统 ...

  4. java web学习总结(一) -------------------基本概念

    一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源( ...

  5. Python新手学习基础之函数-概念与定义

    什么是函数? 函数是可以实现一些特定功能的方法或是程序,简单的理解下函数的概念,就是你编写了一些语句,为了方便使用,把这些语句组合在一起,给它起一个名字,即函数名.使用的时候只要调用这个名字,就可以实 ...

  6. Elasticserach学习笔记-01基础概念

    本文系本人根据官方文档的翻译,能力有限.水平一般,如果对想学习Elasticsearch的朋友有帮助,将是本人的莫大荣幸. 原文出处:https://www.elastic.co/guide/en/e ...

  7. es6学习笔记-class之一概念

    前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...

  8. SpringMVC学习(一)——概念、流程图、源码简析

    学习资料:开涛的<跟我学SpringMVC.pdf> 众所周知,springMVC是比较常用的web框架,通常整合spring使用.这里抛开spring,单纯的对springMVC做一下总 ...

  9. Python学习---模版/包的概念

    1.1. 模块/包的概念 在Python中,一个.py文件就称之为一个模块(Module) 模块一共三种: python标准库 第三方模块 应用程序自定义模块 模块的使用:模块是用来组织函数的 解释器 ...

随机推荐

  1. IO流学习之字节流(一)

    IO流(Input/Output) 简介: 流是一种抽象概念,它代表了数据的无结构化传递.按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列.从流中取得数据的操作称为提取操作,而向流中添加数 ...

  2. 题解【洛谷P3456】[POI2007]GRZ-Ridges and Valleys

    题面 考虑 \(\text{Flood Fill}\). 每次在 \(\text{BFS}\) 扩展的过程中增加几个判断条件,记录山峰和山谷的个数即可. #include <bits/stdc+ ...

  3. jenkins - docker搭建jenkins

    jenkins镜像拉取 docker pull jenkins/jenkins 为jenkins镜像分配容器 docker run -d --name jenkins \ -p 8080:8080 \ ...

  4. 51 nod 1212 无向图最小生成树

    http://www.51nod.com/Challenge/Problem.html#problemId=1212 代码 #include<bits/stdc++.h> using na ...

  5. vjudge 骨牌覆盖

    原题链接:https://vjudge.net/contest/331993#problem/B 在2*N的一个长方形方格中,用一个1*2的骨牌排满方格. 问有多少种不同的排列方法. 例如:2 * 3 ...

  6. 2019ICPC南昌站C.And and Pair

    题意: 给一个二进制数n,求满足0<=j<=i<=n且i&&n==i&&i&j==0的数对(i,j)有多少对,n可能有前导0. 解析: 对一一 ...

  7. 被遗忘的宝藏-LaTeX发行版自带字体&自己一些字体心得

    KMC大作,如果用xelatex的话,这些知识仅仅作为大家了解.希望对于学习latex有所裨益.原文地址:http://bbs.ctex.org/viewthread.php?tid=43596&am ...

  8. php7 安装redis拓展

    配置之前应该是环境已经搭好了,phpinfo的页面可以加载出来.   使用git clone下载git上的phpredis扩展包 git clone  https://github.com/phpre ...

  9. js封装删除数组指定的某个元素的方法

    首先可以给JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为: Array.prototype.indexOf = function(val) { for (var i = ...

  10. VTK坐标系统及视图分割

    计算机图像学里广泛应用的坐标系统有四种,分别是:模型坐标系统(model),世界坐标系统(world),视图坐标系统(view)和显示坐标系统(display). 模型坐标系统就是定义模型时所用的坐标 ...