Winforms 在CRUD n分层WinForm应用程序中,我在哪里实例化我的对象?

Winforms 在CRUD n分层WinForm应用程序中,我在哪里实例化我的对象?,winforms,oop,crud,Winforms,Oop,Crud,假设我有一个WinForm CRUD(类)应用程序。我想在这方面遵循最佳实践,所以我尝试让它遵循OOP和n层设计 不幸的是,我熟悉这些词,但不熟悉它们的用法。让我们来看下面的例子:我的CaseNote程序。我有一个选项卡式应用程序,您可以在其中转到“搜索”选项卡查找成员,然后其中一个选项是转到“案例注释”选项卡以创建新案例注释、查看现有案例注释或创建父注释的后续案例注释。所有这些都是针对您从“搜索”选项卡中选择的成员的 所以,如果我正在创建对象并将它们传递给不同的表单,那么我应该在哪里实例化它们

假设我有一个WinForm CRUD(类)应用程序。我想在这方面遵循最佳实践,所以我尝试让它遵循OOP和n层设计

不幸的是,我熟悉这些词,但不熟悉它们的用法。让我们来看下面的例子:我的CaseNote程序。我有一个选项卡式应用程序,您可以在其中转到“搜索”选项卡查找成员,然后其中一个选项是转到“案例注释”选项卡以创建新案例注释、查看现有案例注释或创建父注释的后续案例注释。所有这些都是针对您从“搜索”选项卡中选择的成员的

所以,如果我正在创建对象并将它们传递给不同的表单,那么我应该在哪里实例化它们呢?我原以为我会有3层;用户界面,对象,DAL。我跌倒的地方是我引用这些对象的地方。我不能在对象层中引用它们,可以吗?另外,如果我在表单上引用它们,如何在一个相当大的应用程序中从一个表单传递到另一个表单


CaseNotes屏幕截图如果你想看更多关于这个问题的文字,你想看MVP和MVC。(这些表示模型视图控制器和模型视图演示器)。有些人会因为我这样说而驳斥我,但他们在概念上非常相似

MVP和MVC的目标是允许您设计应用程序逻辑,而无需考虑应用程序的外观。它还允许您定义用户交互,而无需实现实际的GUI。本质上,你的模型是你的应用程序逻辑,你的数据,你的类,它们实际上是在和你的数据库对话。演示者或控制器与模型交互,控制用户界面并对界面上的用户操作作出反应。最后,视图是winforms设计或网页

我相信你会在网上找到很多关于这个问题的资料,但是如果你能在这个问题上给你一些具体的帮助,应该可以帮助你了解并说明你的阅读

您需要做的第一件事是开始创建表示数据的对象。因此,您将拥有一个CaseNote对象,其中包含CaseNote数据。您将拥有某种类型的案例注释数据容器,例如案例注释数据库。您可以定义这些操作的逻辑操作和属性,就好像它们包含实际项目一样

然后,您将继续定义演示者或控制器,它将定义您希望从GUI支持的操作。同时,您应该定义一个界面,该界面将为演示者/控制器定义可以在GUI上执行的操作。例如,演示者可能会公开一个名为SearchForCaseNote的方法,该方法使用字符串参数。视图界面将公开一个名为DisplayCaseNote的方法。当用户单击搜索按钮时,视图将通过命令传递给演示者,演示者随后将调用模型以获取数据。此时,演示者可以格式化数据,即将DateTime对象转换为字符串,然后通过名为DisplayCaseNote的接口定义方法将数据传递回视图

您不必使用视图接口,您可以直接调用视图,但拥有该接口意味着您可以有许多不同的视图实现

我需要提到的最后一件事是在哪里创建应用程序的这些不同部分。我的观点是,所有东西都应该从演示者/控制者那里掉出来。因此,当应用程序启动时,它会创建presenter/controller对象,然后创建并显示视图,并将其自身作为变量传递给视图。然后,演示者/控制器可以通过从磁盘加载来创建初始模型,或者理想情况下通过依赖项注入容器(如unity)来发现它们。事实上,再次使用unity发现视图实现可能是一个更好的主意,因为它将视图和presenter/controller真正分开。当您移动到另一个视图(即打开另一个窗口)时,您的演示者/控制器应公开一个方法,如DisplayDetailPage,单击按钮时视图将调用该方法。这将为下一个视图创建presenter/controller,而下一个视图将创建视图并获取对模型的引用


希望这能有所帮助。

如果你想了解更多关于这个问题的词汇,你需要了解MVP和MVC。(这些表示模型视图控制器和模型视图演示器)。有些人会因为我这样说而驳斥我,但他们在概念上非常相似

MVP和MVC的目标是允许您设计应用程序逻辑,而无需考虑应用程序的外观。它还允许您定义用户交互,而无需实现实际的GUI。本质上,你的模型是你的应用程序逻辑,你的数据,你的类,它们实际上是在和你的数据库对话。演示者或控制器与模型交互,控制用户界面并对界面上的用户操作作出反应。最后,视图是winforms设计或网页

我相信你会在网上找到很多关于这个问题的资料,但是如果你能在这个问题上给你一些具体的帮助,应该可以帮助你了解并说明你的阅读

您需要做的第一件事是开始创建表示数据的对象。因此,您将拥有一个CaseNote对象,其中包含CaseNote数据。您将拥有某种类型的案例注释数据容器,例如案例注释数据库。您可以定义这些操作的逻辑操作和属性,就好像它们包含实际项目一样

然后,您将继续定义演示者或控制器,它将定义您希望从GUI支持的操作。同时,您应该定义一个界面,该界面将为演示者/控制器定义可以在GUI上执行的操作。对于inst来说也是如此