说明: 我使用MVP作为Windows窗体应用程序的设计模式,具有一些基本的CRUD操作。
要求 我想将IView接口实现为抽象类,因为它将被多个视图使用,我可以提供一些常见的具体实现(比如显示带有错误消息的对话框)。 现在,我的IView在与Presenter相同的项目中实现。 因此,我无法在此项目中添加任何Windows.Forms引用,因为它违反了MVP模式。
提议的解决方案: 我的解决方案是将IView移动到另一个新项目。在这里添加我的获胜表格参考。这将使我能够完成上述任务。
问题 我只是不确定这是不是很好的设计。我在这违反任何规定吗?
答案 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
}