3

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

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

4

5 回答 5

5

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

于 2010-01-15T19:16:26.087 回答
2

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

于 2010-01-15T20:00:19.593 回答
2

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

于 2010-01-15T16:08:51.937 回答
1

数据快照方式:

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

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

于 2010-01-18T13:14:02.263 回答
1

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

于 2010-01-18T09:56:08.160 回答