为什么最初创建TDataSource?

Jam*_*amo 11 delphi oop datasource dataset

创建TDataSource作为数据绑定组件和实际底层TDataSets之间的中介而不是让组件直接连接到TDataSets本身的原因是什么(或将会是什么)?

这看起来像是一个愚蠢的问题,但我正在研究一套广泛的"数据查看器"组件,它们链接到一个通用的"数据连接器"组件等; 在设计这组组件时,我发现自己引用了经典Delphi"TDataSet - > TDataSource - >数据绑定组件"设置的结构作为指导.但是,在我的组件集中,我一直希望将"TDataSource"和"TDataSet"等价物的功能基本上合并到一个类中.它让我想知道首先将它们分开的理由是什么.

Jer*_*ers 12

这完全是关于解耦间接的.

TDataSource有两种:

  • 解耦主细节关系(TDataSource与被绑定的TDataSets在同一模块中;细节TDataSet通过将其' MasterSource属性指向指向主TDataSet 的TDataSource来引用主TDataSet)
  • 将UI与业务层分离(TDataSets位于DataModule中; TDataSource位于包含UI控件的Form/Frame上,UI控件引用其DataSource属性).

由于许多组件可以指向同一个DataSource,因此只需翻转一个TDataSource.DataSet属性即可快速切换它们使用的底层TDataSet.


Ala*_*ark 11

我认为数据感知控件可以附加到不同的数据集,只需更改其关联数据源指向的数据集,而不必更改每个控件的数据集.

因此,您可以通过更改单个数据源而不是TDBEdits,TDBGrids等的负载来更改您正在使用的数据库.


Lar*_*s D 6

  • TDataSet与访问数据库有关。
  • TDataSource与用户界面有关:禁用/启用,同步,数据流等。

如果将两者结合在一起,则数据库组件将获得对所使用的特定用户界面基础结构的依赖。在您自己的程序中可以很好地实现这些依赖关系,但是在分发给许多开发人员的API中则不能实现。