我将做一个简化的例子来解释我想要完成的事情:
我有这个类的很多实例:
type TCustomer = class(TObject) private FOrders: TList<TOrder>; // or how do implement this? // the IDea is that the TCustomer "owns" the TOrder,anyway in the // legacy DB I just have an orders table with FK to the customer table // not the contrary. // But if I do that the Customer object "loses" the TOrders??? [...] // Many other fIElds public [...] end;
如何查询所有客户的订单?想象一下,我想查询2007年9月以来的所有订单.
如果我有10000个TCustomer对象,我不想确保全部创建它们(这意味着从数据库中检索它们:我会检索太多我不需要的信息).
在当前的软件中,当然是通过对orders表的简单查询来完成的.
但是如何在OO世界中实现这一目标呢?
你建议我采用哪种方法?
此外:在重构这种数据库应用程序时,您建议使用ORM(这意味着创建一个新数据库并迁移所有数据)还是仅仅使用现有数据库(在我的情况下这不是坏事)?
@H_404_30@解决方法 解决方案并非易事,我不会称之为简单.您正在寻找的是 lazy loading.基本思想是创建一个 proxy object,它将根据请求从数据库加载对象,并且最好也进行一些智能缓存.在您的情况下,此对象将是您自己的TList实现 – 只是从它派生并覆盖相应的方法来从数据库加载和构造对象.
有成熟的框架可以进行对象关系映射,包括延迟加载.其中一个例子是 Hibernate.如果你允许在你的Delphi应用程序中使用.NET,你可以检查它的一个名为 NHibernate的.NET端口.另一种选择是使用 iBatis或任何框架 listed at Wikipedia. 总结
以上是内存溢出为你收集整理的delphi – 简单的OODesign问题:如何查询来自多个对象的数据?全部内容,希望文章能够帮你解决delphi – 简单的OODesign问题:如何查询来自多个对象的数据?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)