【问题标题】:Where do I instantiate my Objects in CRUD n-Tiered WinForm App?我在哪里可以在 CRUD n-Tiered WinForm App 中实例化我的对象?
【发布时间】:2011-02-08 13:31:48
【问题描述】:

假设我有一个 WinForm CRUD(like) 应用程序。我想遵循这方面的最佳实践,因此我尝试使其遵循 OOP 和 n 分层设计。

不幸的是,我熟悉这些词,但不熟悉它们的实践。所以让我们来看下面的例子:我的 CaseNote 程序。我有一个选项卡式应用程序,您可以在其中转到搜索选项卡以查找成员,然后其中一个选项是转到 CaseNote 选项卡以创建新的案例笔记,查看现有的案例笔记,或为家长创建后续案例笔记笔记。所有这些都适用于您从搜索选项卡中选择的成员。

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

CaseNotes 屏幕截图

【问题讨论】:

    标签: winforms oop crud


    【解决方案1】:

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

    MVP 和 MVC 的目标是允许您设计应用程序逻辑,甚至无需考虑应用程序的外观。它还允许您在不实现实际 GUI 的情况下定义用户交互。从本质上讲,您的模型是您的应用程序逻辑、您的数据、您的类,它们实际上执行诸如与您的数据库对话之类的事情。您的演示者或控制器是与您的模型交互的东西,是控制您的用户界面并对界面上的用户操作做出反应的东西。最后,您的 View 就是您的 winforms 设计或您的网页。

    我相信您将能够在网络上找到大量有关此问题的材料,但为您提供有关此问题的一些具体帮助应该有助于告知和说明您的阅读。

    您需要做的第一件事是开始创建代表数据的对象。因此,您将拥有一个包含案例笔记数据的 CaseNote 对象。您将拥有某种案例记录数据容器,例如案例记录数据库。您可以定义它们的逻辑操作和属性,就好像它们在真实项目中一样。

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

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

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我认为你应该使用 RocketFramework

      【讨论】:

        猜你喜欢
        • 2013-05-21
        • 2013-07-30
        • 1970-01-01
        • 1970-01-01
        • 2016-10-25
        • 1970-01-01
        • 1970-01-01
        • 2011-12-31
        • 2013-01-02
        相关资源
        最近更新 更多