delphi – 简单的OODesign问题:如何查询来自多个对象的数据?

delphi – 简单的OODesign问题:如何查询来自多个对象的数据?,第1张

概述我被分配了重构遗留数据库应用程序的任务,我正在尝试创建包含旧代码的对象.这是我第一次使用真正的OODesign,现在我只是使用OO来封装一些遗留登录并重构应用程序的一部分功能. (现在它是具有UI中所有业务逻辑的经典客户端服务器应用程序,其目的是使其多层化,以便将客户端用于应用程序服务器并最终编写Web界面.) 我将做一个简化的例子来解释我想要完成的事情: 我有这个类的很多实例: type T 我被分配了重构遗留数据库应用程序的任务,我正在尝试创建包含旧代码的对象.这是我第一次使用真正的OODesign,现在我只是使用OO来封装一些遗留登录并重构应用程序的一部分功能. (现在它是具有UI中所有业务逻辑的经典客户端服务器应用程序,其目的是使其多层化,以便将客户端用于应用程序服务器并最终编写Web界面.)

我将做一个简化的例子来解释我想要完成的事情:

我有这个类的很多实例:

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问题:如何查询来自多个对象的数据?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1258762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存