我真的不知道该怎么称呼所以有人请你在我的漂移后随时编辑...
对于我的示例,我们有user
和book
个类。
每个用户在我们的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)有更好的方法吗?
谢谢你,有人请好好理解我的头衔!
答案 0 :(得分:1)
您正在做的事情通常称为"Lazy Loading" or "Lazy Initialization",它是一种常用的编程设计,通过延迟数据加载直到您的程序需要它来帮助提高性能(如果它确实存在)。所以,是的,你是以一种理智的方式做到的;)