WinForms 中的 MVP(演示者和 program.cs)

MVP in WinForms ( presenter & program.cs)

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

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

1)如果 presenter 必须位于单独的项目中,显然它的构造函数需要引用 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 项目中,程序可以正常启动,但是要使用 Model 中的函数,我必须将 MainForm 项目中的引用添加到 Model 项目中,我认为这与 MVP 模式相矛盾。

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

您的视图和模型应该相互独立,也应该独立于 Presenter。他们可能生活在他们自己的项目中,但在一个简单的程序中,一切都在同一个项目中会很好。

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

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

  • 主程序EXE项目:包含Presenterclass和Programclass(即后者为程序入口点,Main()如您所见在您的代码示例中)。参考资料包括:
    • 查看 DLL 项目:包含 MainForm class(以及任何其他视图 classes)
    • 模型 DLL 项目:包含模型 class(es)

换句话说,您可以为主程序项目创建一个 Windows Forms 项目,然后删除为您创建的默认 Form1。您可以为视图 DLL 项目创建一个 class 库项目,并为您的 MainForm class.[=19= 添加一个 Windows 表单 class 到该项目]