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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |