是否难以管理iInheriting来自另一个客户端数据集?

时间:2011-10-21 21:10:53

标签: delphi

假设我有一个客户端数据集CDSPerson,它充当Persons数据库表的包装器。假设我有另一个表PersonBenefits,它将1:1连接回Persons表。

假设我围绕CDSPerson,PersonClass和另一个围绕CDSPersonBenefits,PersonBenefitsClass的类包装一个Delphi类来读写记录。 PersonBenefitsClass继承自PersonClass,因此它可以从两个表中提供数据。我希望能够通过PersonBenefitsClass将数据写回任一表。

是否有人开发了一种干净的方法来处理继承类中的SQL查询,提供程序标志和提交逻辑,以便(a)字段与父类保持一致,以及(b)是否可以更新两个数据库表?

是否有我无法找到的参考资料?这只是一个坏主意吗?我正在使用Delphi 2007。

1 个答案:

答案 0 :(得分:1)

如果你要开发一个业务对象到数据库的映射框架(通常称为ORM,对象关系映射器),你需要加入一些架构来建立像这项工作正常。这是一种方法:

PersonClass和BenefitsClass都继承自BusinessObjectClass。 BusinessObjectClass是一个基类,包含与数据集交互的一般逻辑。它有一个包含关系对象列表的某种列表对象。

每个关系对象都是一个特殊对象,它包含一个或一个BusinessObjectClass后代列表,以及描述两个表之间的外键关系的额外数据。当BusinessObjectClass执行其查询及其更新时,它需要遍历其所有关系对象,并让它们根据需要进行自己的查询和更新。

在构造函数中的复合对象(PersonWithBenefitsClass)中,调用 inherited ,然后设置描述相关BenefitsClass的关系对象。确保以正确的顺序完成任何新对象的插入以保持参照完整性。

这是基本的想法。 (一个基本的想法。可能还有很多其他方法可以做到。)我将详细介绍你如何实现它的细节。