我正在尝试在我的应用程序中按照Model View Presenter (MVP)模式开发项目管理系统。我的问题是,我看到了很多MVP的例子,但没有一个带有一个Presenter和多个Views的例子。例如,当用户打开一个项目时,可以通过树形视图、数据网格和图表查看相同的项目数据。我该如何处理这种情况?
我正在尝试在我的应用程序中按照Model View Presenter (MVP)模式开发项目管理系统。我的问题是,我看到了很多MVP的例子,但没有一个带有一个Presenter和多个Views的例子。例如,当用户打开一个项目时,可以通过树形视图、数据网格和图表查看相同的项目数据。我该如何处理这种情况?
你几乎总是应该每个视图实例都有一个演示者实例。
比如你打开了一个CustomerView,以及它的CustomerViewPresenter。这是每个实例的一个。
然后你打开另一个CustomerView,以及另一个CustomerViewPresenter实例。这是每个实例的两个。
这并不意味着给定的演示者总是必须使用相同的视图,事实上不应该这样。演示者应该与一个视图接口交互。你应该能够为测试交换真实视图和模拟视图。
using System;
// declaring an interface
public interface A {
// declare a treeview;
void treeView();
// declare a datagrid;
void datagrid();
// declare a chart;
void chart();
}
// The views of interface A
// is inherited into interface B
public interface B : A {
// declare a label or string
string mystring { get; set; }
}
C# 允许用户将一个接口继承到另一个接口中。当一个类实现了继承的接口时,它必须提供接口继承链中定义的所有成员的实现。
public partial class Form1 : Form, B
{
private Presenter presenter;
public Form1()
{
InitializeComponent();
}
public string mystring
{
get
{
return textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
public void treeView()
{
presenter = new Presenter(this);
presenter.GenerateTreeView();
}
public void datagrid()
{
presenter = new Presenter(this);
presenter.GenerateDatagrid();
}
public void chart()
{
presenter = new Presenter(this);
presenter.GenerateChart();
}
}
而你的演示者可能长这样:
public class Presenter
{
public B viewB;
public DomainLogic model;
public Presenter(B view)
{
viewB = view;
}
public void GenerateTreeView()
{
model = new DomainLogic();
model.CreateTreeView();
}
public void GenerateDatagrid()
{
model = new DomainLogic();
model.CreateDatagrid();
}
public void GenerateChart()
{
model = new DomainLogic();
model.CreateChart();
}
public void GenerateString()
{
model = new DomainLogic();
viewB.mystring = model.createString();
}
}