在MVP中,IView可以在一个单独的项目中实现吗?

时间:2013-02-06 15:00:19

标签: winforms architecture mvp

说明: 我使用MVP作为Windows窗体应用程序的设计模式,具有一些基本的CRUD操作。

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

提议的解决方案: 我的解决方案是将IView移动到另一个新项目。在这里添加我的获胜表格参考。这将使我能够完成上述任务。

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

1 个答案:

答案 0 :(得分: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
}