加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:27:08 所属栏目:大数据 来源:网络整理
导读:我被分配了重构遗留数据库应用程序的任务,我正在尝试创建包含旧代码的对象.这是我第一次使用真正的OODesign,现在我只是使用OO来封装一些遗留登录并重构应用程序的一部分功能. (现在它是具有UI中所有业务逻辑的经典客户端服务器应用程序,其目的是使其多层化,
我被分配了重构遗留数据库应用程序的任务,我正在尝试创建包含旧代码的对象.这是我第一次使用真正的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(这意味着创建一个新数据库并迁移所有数据)还是仅仅使用现有数据库(在我的情况下这不是坏事)?

解决方法

解决方案并非易事,我不会称之为简单.您正在寻找的是 lazy loading.
基本思想是创建一个 proxy object,它将根据请求从数据库加载对象,并且最好也进行一些智能缓存.在您的情况下,此对象将是您自己的TList实现 – 只是从它派生并覆盖相应的方法来从数据库加载和构造对象.
有成熟的框架可以进行对象关系映射,包括延迟加载.其中一个例子是 Hibernate.如果你允许在你的Delphi应用程序中使用.NET,你可以检查它的一个名为 NHibernate的.NET端口.另一种选择是使用 iBatis或任何框架 listed at Wikipedia.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读