0

我目前在我的网站结构设计方面陷入僵局。目前我正在使用对象来简化我的网站的结构(我有一个人对象、一个派对对象、一个职位对象等......),理论上,这些对象中的每一个都是来自它各自表中的一行数据库。

现在从我所学到的,OO Design 有利于保持简单和易于使用/实现,我同意这一点 - 它使我的代码看起来更加干净和易于维护,但我感到困惑的是如何我开始将我的对象链接到数据库。

假设有一个人员页面。我创建了一个人对象,它等于一个 mysql 查询(这是合理的),但是那个人可能有多个位置,我需要在单个页面上获取并显示这些位置。

我目前正在做的是从 person 对象中使用一个名为getPositions的方法,该方法从 mysql 获取数据并为每一行创建一个单独的位置对象,将数据作为数组传递。这样可以将查询降到最低(每页 2 个),但它似乎是一个可怕的实现,对我来说,它违反了面向对象设计的规则(如果我想更改 mysql 行,我需要将其更改为多个地方),但另一种情况更糟。

在这种情况下,替代方法只是获取我需要的 ID,然后创建单独的位置,传入 ID,然后在构造函数中从数据库中获取行。如果你每页有 20 个职位,它可以很快加起来,我已经读过Wordpress 因其每页的大量查询和 CPU 使用率而受到批评。在这种情况下我需要考虑的另一件事是排序,这样做意味着我需要使用 PHP 对数据进行排序,这肯定不能像在 mysql 中那样高效。

当然,页面将(并且可以)被缓存,但对我来说,这几乎就像对构建不佳的应用程序作弊一样。在这种情况下,正确的解决方案是什么?

4

1 回答 1

0

你现在的做法至少是在正确的轨道上。在父对象中有一个引用子对象的数组基本上是数据在数据库中的表示方式。

如果您将子项作为引用存储在父数组中,我不能完全确定您的问题,但您应该这样做,这就是 PHP 默认存储它们的方式。如果您还对从数据库中提取的对象使用单例模式,则您永远不需要修改多个对象来更改您在问题中建议的一行。

您可能还应该为您的对象创建多个构造函数(使用返回新实例的静态方法),以便您可以从它们的 ID 创建它们并让它们提取数据或仅从您已有的数据创建它们。后一种情况将在您创建孩子时使用;您可以让父级为其子级提取所有数据,并仅使用一个查询创建所有这些数据。从其 ID 中获取孩子可能会在其他地方使用,所以如果需要的话,它很好。

对于排序,您可以创建额外的私有(或公共,如果需要)数组,以特定方式对子项进行排序,并引用主数组引用的相同对象。

于 2013-02-26T15:13:43.750 回答