【问题标题】:Where should the TClientDataset component be located?TClientDataset 组件应该放在哪里?
【发布时间】:2010-01-15 15:58:28
【问题描述】:

一些背景知识:我想开发一个桌面应用程序,以 SQL 数据库作为存储。一次只有一个用户连接到数据库。
为了使维护更容易,我想将 GUI 与 Busniss Logic 分开。因此,我想为每个 Dialog 使用 DataModule(实现 BL 的地方)。

我的问题: 插入 TClientDataset 组件的合适位置在哪里?直接在 Dialog 中还是在 DataModule 中?

【问题讨论】:

    标签: delphi database-design tclientdataset datamodule


    【解决方案1】:

    就个人而言,我总是将 TDataset-descendants 放在数据模块中。如果您在某个时候决定重新设计表单,您仍然可以使用数据集。在表单之间共享信息也更容易。 一般来说,保持你的 GUI 和数据分开!

    【讨论】:

      【解决方案2】:

      如果 TClientDataSet 不会同时被多个屏幕使用,为了方便起见,将它们放在 DataModule 上是安全的。但是,当您有两个或多个屏幕访问同一个 TClientDataSet 时,您将遇到问题,因为数据集只有一个光标,并且移动到一个屏幕上的另一条记录也会移动到其他屏幕上的另一条记录。在这种情况下:将 TClientDataset 放在使用数据的屏幕上。连接仍然可以放在数据模块上,因为它由所有数据集共享。

      【讨论】:

        【解决方案3】:

        我会将DataSets 放入DataModules。这样,您可以在不同表单中的多个视图指向同一个数据集,例如详细信息视图和网格中的列表,并且它们将始终自动同步 .
        它还规范了数据之间的分离与业务规则和用户界面与演示功能,使更容易更改业务规则或重新设计独立的 UI强>.
        如果您需要让多个表单实例访问不同的数据,您始终可以实例化多个 DataModule 并将每个表单挂钩到其相关的表单。

        【讨论】:

          【解决方案4】:

          数据模块中的数据集——但表单或框架上的数据源——对我来说一直很有效。

          【讨论】:

          • 为什么将 TDataSource 放在表单上而不是放在 ClientDataset 旁边?
          • 许多原因:您通常希望响应 TDataSource 中影响包含数据控件的表单的事件。如果 DataSource 位于数据模块上,则数据模块必须了解表单才能使这些事件起作用,这会导致更紧密且不需要的耦合。您应该将 DataSource 视为表单和数据模块之间的“桥梁” - 请记住,可能不止一个表单想要使用该数据模块,因此每个表单都应该有自己的 DataSource 连接到它。跨度>
          【解决方案5】:

          datasnap方式:

          • 拥有带有数据访问层和 TDatasetProvider 组件的 BL 数据模块,以及业务代码
          • 只有带有 TClientDatasets 的数据模块。

          这样,如果您使用 DataSnap(或其他可以重用客户端数据集的 n 层技术)将实现更改为 n 层,您只需将 BL 数据模块移动到适当的层。

          【讨论】:

          • 业务代码不应该在TClientDataSets层吗?
          • 这只是 DataSnap 的方式。这样,客户端数据集保留在接口上,提供者(和数据访问)转到另一层。这将使用该框架轻松过渡到 3 层架构... ;-)
          猜你喜欢
          • 2014-05-27
          • 2018-01-18
          • 1970-01-01
          • 2012-02-17
          • 2018-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-15
          相关资源
          最近更新 更多