0

简介: 我将 MVP 用作具有一些基本 CRUD 操作的 Windows 窗体应用程序的设计模式。

要求 我想将 IView 接口实现为抽象类,因为它将被多个视图使用,并且我可以提供一些常见的具体实现(例如显示带有错误消息的对话框)。现在我的 IView 与 Presenter 在同一个项目中实现。因此,我无法在此项目中添加任何 Windows.Forms 引用,因为它违反了 MVP 模式。

建议的解决方案: 我的解决方案是将 IView 移至不同的新项目。在此处添加我的获胜表格参考。这将使我能够完成上述工作。

问题 我只是不确定这是否是好的设计。我在这里违反任何规则吗?

4

1 回答 1

3

您可以在 Presenter 项目中声明视图接口,在 Views 项目中声明抽象基视图类,如下所示:

(主讲项目)

public interface IView 
{
  void ShowErrorMessage(string message);
}

public interface IFooView : IView
{
  string SomeField { get; set; }
  //...
  event EventHandler SomethingClicked;
  //...
}

public class FooPresenter 
{
  private readonly IFooView _view;

  public FooPresenter(IFooView view)
  {
    // inject view here
  }

  public void DoSomething()
  {
    // error case
    _view.ShowErrorMessage("some message");
  }
}

(查看项目)

public abstract class BaseView : IView
{
  protected void ShowErrorMessage(string message)
  {
    // implement shared behavior here
  }
}

public class FooView : BaseView, IFooView
{
  // view specific behavior here
}
于 2013-02-07T09:51:48.017 回答