创建TDataSource作为数据绑定组件和实际底层TDataSets之间的中介的原因是什么(或将会是什么),而不是让组件直接连接到TDataSets本身?
这看起来像是一个愚蠢的问题,但我正在研究一套广泛的“数据查看器”组件,它们链接到一个通用的“数据连接器”组件等;在设计这组组件时,我发现自己引用了经典Delphi“TDataSet - > TDataSource - >数据绑定组件”设置的结构作为指导。但是,在 my 组件集中,我一直希望将“TDataSource”和“TDataSet”等价物的功能基本合并到一个类中。它让我想知道首先将它们分开的理由是什么。
答案 0 :(得分:12)
全部是关于decoupling和indirection。
使用TDataSource有两种类型:
由于许多组件可以指向同一个DataSource,因此只需翻转一个TDataSource.DataSet属性即可快速切换它们使用的底层TDataSet。
答案 1 :(得分:11)
我认为数据感知控件可以附加到不同的数据集,只需更改其关联数据源指向的数据集,而不必更改每个控件的数据集。
因此,您可以通过更改单个数据源而不是TDBEdits,TDBGrids等的负载来更改您正在使用的数据库。
答案 2 :(得分:5)
如果将这两者结合使用,则数据库组件将依赖于您正在使用的特定用户界面基础结构。这些依赖项在您自己的程序中可以正常,但在分发给许多开发人员的API中不行。
答案 3 :(得分:3)
您可以将其视为某种模型 - 视图 - 控制器模式。
数据位于DataSet(模型)中,该数据集不知道谁在使用它们以及用于什么。
DB感知组件为用户提供不同的接口(视图),以便在不知道谁持有这些数据的情况下与这些数据进行交互
DataSource是介于(控制器)之间的过程,它提供链接并将任何数据更改或命令分派给模型或视图。
这样可以轻松绑定到不同的数据集,而无需触及视图,也无需更改或添加新视图,而数据集无需关心它们。
答案 4 :(得分:1)
我不知道这是否正是开发团队的想法,但可能有用的一种方法是更改数据集。假设您拥有一大堆数据感知控件,并且它们都绑定到一个数据集,然后您想要切换到另一个数据集。如果它们都通过中介绑定,那么您所要做的就是更改数据源的.Dataset属性,而不是迭代所有控件并更改其属性。
(尽管您可能仍需要更改一堆字段名称,具体取决于设置方式,因此这可能不是最好的示例。)