2011-11-11 1 views
3

정말 아무 제목이 그래서 누군가가 내 드리프트를 일단 편집 주시기 바랍니다 무엇을 생각 ... 내 예를 들어기본 데이터가있는 클래스와 그 이상, 더 많은 데이터 - 부분로드?

이 없다, 우리는 userbook 클래스가 있습니다.

각 사용자는 우리의 user_data 테이블에 한 줄, 우리의 book_data 테이블의 각 책 한 줄, 그리고 각 사용자의 컬렉션 일대 user_book_collection 테이블에서 조회 할 수 있습니다.

사용자 개체를로드 할 때 나는 입니다. 모든 기본 데이터 (이름, 나이, 위치)를 원하지만 사용자의 서적 컬렉션을 알고 싶거나 원치 않을 수 있습니다. I 아마 그럴 필요가 없습니다.은 해당 컬렉션의 각 책에 대한 모든 기본 데이터를 알고 싶지만 때로는 가능할 수도 있습니다.

하지만이 모든

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

나는 그 문제를 다루는 좋은 방법이라고 생각합니다. __get() 및 __set()과 같은 PHP 마법 메서드를 살펴볼 수도 있습니다. –

답변

1

당신이하고있는 일은 일반적으로 "Lazy Loading" or "Lazy Initialization"이라고하며, 프로그램이 필요할 때까지 데이터로드를 지연시켜 성능을 향상시키는 데 주로 사용되는 프로그래밍 디자인입니다. 그래서 네, 당신은 제정신의 방식으로하고 있습니다;)

+0

적절한 용어를 알려 주셔서 감사합니다. 항상 신인에게 문제가됩니다! – Drew

관련 문제