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项目:包含
Presenter
class和Program
class(即后者为程序入口点,Main()
如您所见在您的代码示例中)。参考资料包括:
- 查看 DLL 项目:包含
MainForm
class(以及任何其他视图 classes)
- 模型 DLL 项目:包含模型 class(es)
换句话说,您可以为主程序项目创建一个 Windows Forms 项目,然后删除为您创建的默认 Form1
。您可以为视图 DLL 项目创建一个 class 库项目,并为您的 MainForm
class.[=19= 添加一个 Windows 表单 class 到该项目]
我正在学习 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项目:包含
Presenter
class和Program
class(即后者为程序入口点,Main()
如您所见在您的代码示例中)。参考资料包括:- 查看 DLL 项目:包含
MainForm
class(以及任何其他视图 classes) - 模型 DLL 项目:包含模型 class(es)
- 查看 DLL 项目:包含
换句话说,您可以为主程序项目创建一个 Windows Forms 项目,然后删除为您创建的默认 Form1
。您可以为视图 DLL 项目创建一个 class 库项目,并为您的 MainForm
class.[=19= 添加一个 Windows 表单 class 到该项目]