C# WinForms中的MVP(presenter&;program.cs)

C# WinForms中的MVP(presenter&;program.cs),c#,winforms,mvp,C#,Winforms,Mvp,我正在学习MVP模式,并有以下问题: 如果我有一个表单(projectmainform)、一个模型(projectmodel)和一个演示者,我应该为我的演示者创建一个新项目,还是可以将它放在mainformproject中 1) 如果演示者必须位于单独的项目中,则显然需要对其构造函数的MainForm进行引用,这导致了第二个问题: 当应用程序在program.cs(MainForm)中启动时,我需要创建演示者: static void Main() { Applicati

我正在学习MVP模式,并有以下问题:

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

1) 如果演示者必须位于单独的项目中,则显然需要对其构造函数的MainForm进行引用,这导致了第二个问题:

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

static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Presenter presenter = new Presenter(new MainForm()); //Here it is
        Presenter.Run();
    }
但是,由于演示者是在一个单独的项目中,我不能在没有参考的情况下使用它。但是,已经有一个从presenter到MainForm的引用,所以我无法添加它

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


请告诉我如何正确设计我的解决方案。

您的视图和模型应该相互独立,并且与演示者无关。他们可能生活在自己的项目中,但在一个简单的程序中,所有的东西都在同一个项目中是可以的

如果您确实希望将它们放在单独的项目中,那么这很容易做到。包含
程序
类的主项目也将包含
演示者
类。视图(即
MainForm
类)和模型将(可能)位于各自的项目中

项目的层次结构如下所示:

  • 主程序EXE项目:包含
    Presenter
    类和
    program
    类(即后者用于程序入口点,
    Main()
    ,如代码示例所示)。参考资料包括:
    • 视图DLL项目:包含
      MainForm
      class(和任何其他视图类)
    • 模型DLL项目:包含模型类
换句话说,您可以为主程序项目创建Windows窗体项目,只需删除为您创建的默认
Form1
。您可以为视图DLL项目创建类库项目,并为您的
MainForm
类将Windows窗体类添加到该项目中