MVP模式-被动视图并通过IView公开复杂类型(Asp.Net,Web窗体)

时间:2020-03-06 14:55:27  来源:igfitidea点击:

我最近使用被动视图方法切换到MVP模式。当视图界面仅公开基本的clr类型(例如映射到TextBoxes的字符串,映射到DropDownLists的IDictionary,映射到某些网格的IEnumerable,转发器)时,我感到很舒服。

但是,只有当我只关心那些列时,才可以使用最后一种方法。如何在IView中映射网格的多行内容?目前,我想到了两种解决方案,它们都不是很出色:

  • 为网格的内容创建一个DTO并在IView中公开IEnumerable,或者
  • 像在IView中那样公开IEnumerable或者仅公开"网格"。

第一种解决方案似乎打破了被动视图规则,而更接近于"监督控制器"模式,第二种解决方案则完全打破了整个MVP模式。
我们将如何处理?

谢谢,?ukasz

解决方案

MVP使Webforms的开发变得更加容易,除了在这种情况下。但是,如果我们使用TDD来验证IView确实需要该数据网格,那么我真的看不出问题出在哪里。

我认为我们正在尝试执行以下操作:

public interface IView
{
 DataTable DataSource {get; set;}
}

public class View : IView {

private GridView _datasource;
public DataSource 
{
  get { return _datasource; }
  set 
  { 
    _datasource = value; 
    _datasource.DataBind(); 
  }
}

当与MVP模式一起使用时,我发现这个小模式非常有帮助。