具有基本数据然后更多的类以及更多数据 - 部分加载?

时间:2011-11-11 14:24:42

标签: php oop constructor

我真的不知道该怎么称呼所以有人请你在我的漂移后随时编辑...

对于我的示例,我们有userbook个类。

每个用户在我们的user_data表中是一行,每本书在book_data表中一行,并且可以从一对多user_book_collection表中查询每个用户的集合

当我加载用户对象时,我某些我想要所有基本数据(姓名,年龄,位置),但我可能想知道也可能不想知道用户的书籍收藏。我可能不想知道该集合中每本书的所有基本数据,但偶尔也可以。

但如果需要,我希望所有这些都可用......

RELATIONSHIP MAP

User
  |-- name
  |-- age
  |-- location
  |-- book collection (ARRAY)
        |-- Great Gatsby
        |-- Grapes of Wrath
        |-- Catch-22
        |-- Huckleberry Finn
              |-- author
              |-- edition
              |-- publisher
              |-- price

我目前的方法是通过用户的构造函数加载第一个“层”数据。然后,如果我需要知道他的收藏品,我有一个像这样的方法对:

public function getBookCollection() {
    if (empty($this->_Books)) {
        self::loadBookCollection();
    }
    return $this->_Books;
}

private function loadBookCollection() {
    // query dbase with user's ID
    // load results into $this->_Books array
}

empty()检查是为了避免重复访问数据库,以便通过类中的不同方法获取$_Books数组的数据。

我认为只要我想初始化一个用户对象,这比加载整个庞大的数据树更好......

这是一个简单的例子,但我认为这很清楚。

我的问题是:

1)这是处理此类事情的正常方式吗?我可以想象这种数据重叠的情况可能会继续下去......

2)有更好的方法吗?

谢谢你,有人请好好理解我的头衔!

1 个答案:

答案 0 :(得分:1)

您正在做的事情通常称为"Lazy Loading" or "Lazy Initialization",它是一种常用的编程设计,通过延迟数据加载直到您的程序需要它来帮助提高性能(如果它确实存在)。所以,是的,你是以一种理智的方式做到的;)