我在哪里实例化CRUD n-Tiered WinForm应用程序中的对象?

时间:2009-04-28 15:04:06

标签: winforms oop crud

假设我有一个WinForm CRUD(如)应用程序。我想遵循这方面的最佳实践,所以我尝试按照OOP和n-Tiered设计进行操作。

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

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

CaseNotes屏幕截图

2 个答案:

答案 0 :(得分:2)

如果你想看看围绕这个问题的更多话,你想看一下MVP和MVC。 (这些代表模型视图控制器和模型视图展示器)。有些人会因为这样说而向我开枪,但他们在概念上非常相似。

MVP和MVC的目标是允许您设计应用程序逻辑,甚至不必考虑应用程序外观。它还允许您定义用户交互,而无需实现实际的GUI。实际上,你的模型是你的应用程序逻辑,你的数据,你的类实际上做的事情,如与数据库交谈。您的演示者或控制器是与您的模型交互的内容,它控制您的用户界面以及对界面上的用户操作做出反应。最后,您的View是您的winforms设计或您的网页。

我相信你能在网上找到大量有关这方面的资料,但是为了给你一些具体的帮助,这个问题可以用来告知和说明你的阅读。

您需要做的第一件事就是开始创建代表您数据的对象。因此,您将拥有一个包含案例数据的CaseNote对象。您将拥有某种案例说明数据容器,例如案例说明数据库。您可以将这些操作和属性定义为真实项目。

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

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

我需要提到的最后一件事是你在哪里创建应用程序的这些不同部分。我的观点是演示者/控制器应该发生的一切。因此,当应用程序启动时,它会创建演示者/控制器对象,然后创建并显示将视图作为变量传递给视图的视图。然后,演示者/控制器可以通过从磁盘加载它们来创建初始模型,或者理想地通过像unity这样的依赖注入容器来发现它们。事实上,使用unity来发现视图实现可能是一个更好的主意,因为它为视图和演示者/控制器之间提供了真正的分离。当您转到另一个视图(即打开另一个窗口)时,您的演示者/控制器应该公开一个方法,例如DisplayDetailPage,当单击一个按钮时视图会调用该方法。这将为下一个视图创建演示者/控制器,然后创建视图并获得对模型的引用。

希望这有帮助。

答案 1 :(得分:-1)

我认为你应该使用R ocketFramework

相关问题