gpt4 book ai didi

design-patterns - MVP Passive View 和 Supervising Controller 的集合实现差异

转载 作者:行者123 更新时间:2023-12-04 17:56:38 25 4
gpt4 key购买 nike

我已经开始思考整个 MVP 模式,尽管我在单个对象上做得很好,但在集合方面开始变得困难。

因此,假设我们正在构建一个简单的 WinForms 应用程序,该应用程序由 Form 中的 DataGrid 组成,数据模型是一个简单的东西集合,其中这些东西有一堆属性,而 View 将实际显示它们:

型号

public class Person
{
public string Name { get; set; }
public DateTime Birth { get; set; }
public bool IsCool { get; set; }
}

public class People
{
public List<Person> Persons { get; set; }
}

查看
public interface IPeopleView
{
List<People> ListOfPeople { get; set; }
}

public partial class PeopleViewImpl : Form, IPeopleView
{
private DataGridView _grid = new DataGridView();

public PeopleViewImpl()
{
InitializeComponent();
}

// Implementation of IPeopleView
public List<People> ListOfPeople
{
get { return /* TODO */; }
set { _grid.DataSource = value; }
}
}

主讲人
public class PeoplePresenter
{
private People _model;
private IPeopleView _view;

public PeoplePresenter(People model, IPeopleView view)
{
_model = model;
_view = view;
}

void UpdateView()
{
_view.ListOfPeople = _model.Peoples;
}
}

那么我应该在 View 的 List<People> ListOfPeople 上实现什么? getter 以及我应该如何调用 Presenter 的 UpdateView() ?

通常,为了实现 MVP 有哪些额外的 Presenter 方法会很有趣被动 View 监理分别?

任何建议、代码风格审查或意见将不胜感激。提前非常感谢。

最佳答案

首先,您应该决定一种模式:

  • 如果您想利用数据绑定(bind)并且可以使用自动 View 测试工具,则监督 Controller 是合适的
  • 如果您的 View 数据变得更加复杂,或者您必须依赖纯单元测试来获得完整 View
  • ,则会指示被动 View 。
  • 如果您需要轻松访问完整的 View 状态并且可以生成代码,则演示模型(也称为模型 View ViewModel)是理想的

  • 我收藏了 all aspects as well as links to useful considerations and examples .

    无论哪种情况,您都应该定义一个 PeopleModelPeopleViewImplementation引用 PeopleModel .这清楚地将模型与 View 分开。

    当涉及到集合时,监督 Controller 可以依赖列表的数据绑定(bind)到 DataGridView .见 winForms + DataGridView binding to a List .只有被动 View 和表示模型需要额外的代码来将列表分别映射到 View 字段到表示模型。

    其次,数据映射要明确:应该 PeopleView显示人员列表或几个人的列表? DataGridView可以每行显示一个人,也可以每行显示一个人。如果每行显示一个人,则可以通过以下方式之一实现对人的处理,例如:
  • 在一页上显示一个人的所有人,并添加一个寻呼机元素以在不同的人之间导航
  • 在数据网格中显示一个人的所有人,并为这些人添加一个选择小部件,例如一棵树与所有民族
  • 在数据网格中混合不同人的人,并添加一列显示每个人的人
  • 关于design-patterns - MVP Passive View 和 Supervising Controller 的集合实现差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7630028/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com