记录一下学习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. ROS学习--RViz使用的要点

    1.RViz文件保存,下次面板打开时,默认展示上一次的配置 2.设置Fixed_Frame很重要,一打开默认配置,就要确认这个参数是否正确配置,不然会出现:激光数据不展示.点pose_initial时 ...

  2. 问题 C: 查找

    #include <cstdio> #include <vector> #include <algorithm> using namespace std; bool ...

  3. C语言 while

    C语言 while while 语句 流程图 案例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stri ...

  4. window服务session隔离

    在window服务中抓取窗体是做不到的,因为window系统的session隔离机制:如果想要调用外部程序,可以通过 创建代理进程 进行操作(通过非托管代码CreateProcessAsUser函数进 ...

  5. Genymotion下载及安装(安卓虚拟机)

    Genymotion下载及安装   一.注册\登录 打开Genymotion官网,https://www.genymotion.com/ ,首先点击右上角的Sign in进行登录操作.如何登录就不细讲 ...

  6. 微信小程序调试页面的坑

    使用微信开发者工具切新的页面保存刷新无法在左侧直接预览必须在app.json文件配置页面(填写路径但是不用写后缀名),并且把想要预览的页面放在第一个位置.

  7. spring整合websocket,如何在服务端依赖注入service

    1.在pom.xml文件中添加jar包: <properties> <spring.version>4.0.5.RELEASE</spring.version> & ...

  8. linux - 查看是否安装 apache 以及 apache 版本

    命令 apachectl -v httpd -v 备注:这两个命令的作用一样 结果

  9. chrome js报错Uncaught SyntaxError: Unexpected string

    个人博客 地址:http://www.wenhaofan.com/article/20180912123136 js报错,最后发现是$(function(){})这部分()不完整 $(function ...

  10. Spring-Boot-2.0.0-M1版本将默认的数据库连接池从tomcat jdbc pool改为了hikari

    spring-configuration-metadata.json spring-boot-autoconfigure-2.0.0.M7.jar!/META-INF/spring-configura ...