web app OO概念混乱

时间:2013-09-10 16:03:02

标签: sql ajax oop web-applications

这是一个关于资源“最佳实践”和“有效利用”的概念问题。 专门处理数据库和在线Web应用程序中的大型数据集,并从过程处理方法转向更面向对象的方法。

获取“列表”页面,该页面几乎存在于应用程序的所有CRUD方面。该列表显示公司,地址和联系人。为了论证和“适当的”RDBM,假设我们已经对数据进行了规范化,使得公司可以拥有多个地址和联系人。 - 对于我们的场景,假设我有200个公司的列表,每个公司有2-10个地址,每个地址都有一个联系人。即“商店”被命名为“麦当劳”的任何特许经营权,但“名称”可能有多个地址。)

TABLES

  • 公司
  • 地址
  • 联系人

到目前为止,我将进行单个数据库调用并使用连接来撤回所有数据,循环数据并输出每一行......某些分组将在应用程序层完成以显示友好的态度。 (这似乎是最有效的方式,因为RDBM完成了繁重的工作 - 有一个最小的网络调用(一个到db,一个来自db,一个http请求,一个http响应)。

另一种方法是,如果你不能在应用层进行分组,就是查询公司列表,循环遍历,并在循环内部为地址,联系人分别进行数据库调用。效率较低,因为您正在进行多个数据库调用

现在 - 问题,或坚持点......概念上......

如果我有公司对象,地址对象和联系对象 - 似乎为了获得相同的结果 - 你会调用一个'getCompanies'方法来返回一个列表,然后你循环列表,并为每个调用'getAdderss',同样调用'getContact' - 传递公司ID等。

在网络应用程序中 - 这意味着从应用程序层到数据库的数据流量更多,以及许多较小的数据库调用等等 - 它似乎非常有效。

如果随后将相当数量的逻辑移动到客户端,对于AJAX应用程序,则会导致网络流量增加,导致内部网络开销增加。

有人可以评论一下解决这个问题的最佳方法。也许这是一个概念性的事情。

有人建议在访问这些大型数据集时使用“网关”,而不是更小的更细粒度的对象数据 - 但这并不能帮助我理解,我不确定它是否准确。

2 个答案:

答案 0 :(得分:0)

当然,从数据库中一次性获取所需的一切是最有效的。您不需要因为想要将代码编写为OO模型而放弃。基本上,您首先从数据库中获取所有结果,然后将表格数据转换为分层表单以填充对象。 “getCompanies”可以使单个数据库调用加入地址和联系人,并返回包含“地址”和“联系人”的填充列表的“公司”对象。请参阅Object-relational mapping

答案 1 :(得分:0)

我已经多次处理过这个问题了。要记住的第一件也是最重要的事情是:不要过早优化。优化代码的可读性,DRY原则等,然后回过头来修复“慢”的东西。

但是,具体到这种情况,不是一次一个地迭代获取每个公司的地址,而是将所有公司ID的列表传递给提取器,并获取所有这些公司ID的所有地址,然后缓存该地图中的地址列表。当您需要通过addressID获取地址时,从该本地缓存中获取它。这称为IdentityMap。但是,正如我所说,我不建议在需要之前重新编码此优化的流程。大多数情况下,页面上有10个内容,而不是100个,因此通过更改优化流的“正常”流量,您只需节省几毫秒。

当然,一旦你完成了20次,在“优化流程”中编写代码变得更加自然,但你也有过何时做和不做的经验。