WinForms中的MVP(演示者和程序集)

时间:2015-06-16 19:16:13

标签: c# winforms mvp

我正在学习MVP模式并遇到以下问题:

如果我有一个表单(项目MainForm),一个模型(项目模型)和一个演示者,我应该为演示者创建一个新项目还是可以将它放在MainForm项目中?

1)如果演示者必须位于单独的项目中,它显然需要引用MainForm作为它的构造函数,这导致我们遇到第二个问题:

当应用程序在program.cs(在MainForm中)启动时,我需要创建我的演示者:

static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Presenter presenter = new Presenter(new MainForm()); //Here it is
        Presenter.Run();
    }

但是,由于演示者是在一个单独的项目中,我不能在没有引用的情况下使用它。但是,已经有一个从演示者到MainForm的引用,所以我无法添加它。

2)如果演示者位于MainForm项目中,程序就可以正常启动,但要使用模型I中的函数必须将MainForm项目的引用添加到Model项目中,我认为这与MVP模式相矛盾。

请告诉我如何正确设计我的口水。

1 个答案:

答案 0 :(得分:0)

您的视图和模型应该彼此独立且与Presenter无关。他们可能生活在他们自己的项目中,但在一个简单的程序中可以很好地处理同一项目中的所有内容。

如果您确实希望将它们放在单独的项目中,那很容易完成。包含Program类的主项目还将包含 Presenter 类。视图(即MainForm类)和模型将(可能)在他们自己的项目中。

项目的层次结构看起来像这样:

  • 主程序EXE项目:包含Presenter类和Program类(即后者用于程序入口点,Main(),如您在代码示例中所示)。参考文献包括:
    • 查看DLL项目:包含MainForm类(以及任何其他视图类)
    • 模型DLL项目:包含模型类

换句话说,您可以为主程序项目创建Windows窗体项目,只需删除为此创建的默认Form1。您可以为视图DLL项目创建一个类库项目,并将Windows Form类添加到MainForm类的该项目中。