TClientDataset组件应该放在哪里?

时间:2010-01-15 15:58:29

标签: delphi database-design tclientdataset datamodule

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

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

5 个答案:

答案 0 :(得分:5)

Personaly,我将TDataset-descendants放在数据模块中。如果您在某个时候决定重新设计表单,那么您仍然可以使用自己的数据集。在表单之间共享信息也更容易。 通常,保持GUI和数据分离!

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我会将 DataSet放在DataModules 中。这样,您可以在不同的表单中指向同一个数据集的多个视图,例如详情视图和网格中的列表,它们将始终自动同步
它还将数据与业务规则和用户界面之间的分离与表示功能正式化,使更容易更改业务规则或重新设计UI
如果您需要让窗体的多个实例访问不同的数据,您可以始终实例化多个DataModule并将每个Form挂钩到相关的Form。

答案 3 :(得分:1)

数据模块中的数据集 - 但表格或框架上的数据源 - 对我来说一直都很好。

答案 4 :(得分:1)

datasnap方式:

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

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