Извлечение зависимого / родительского объекта из метода объекта домена - PullRequest
0 голосов
/ 09 сентября 2009

Как можно было бы получить зависимый / родительский объект от сущности.

$person->getAddress();

Это должно извлечь объект Address для этого человека из базы данных и вернуть его как объект. Это хороший способ сделать это и как должен выглядеть код, если это нормально делать.

Это означало бы, что сам объект должен знать, что адрес является объектом сущности / значения, с которым он связан. Почему я хочу такой синтаксис, потому что он будет выглядеть чисто на уровне представления.

Класс персонажа будет выглядеть так:

class Person {
  protected $_domain = null; // domain is assigned when instantiated
  protected $_data = array('name', 'address');
  protected $_relations = array(
    'address'=>array(
      'class'=>'Address'
    )
  );
  protected $_retrievedRelations = array();
  public function getAddress() {
    if (array_key_exists('address', $this->_relations) ) {
      if (!array_key_exists('address', $this->_retrievedRelations) ) {
        $this->_retrievedRelations['address'] = $this->_domain->getAddress($this->_data['address']);
      }

      return $this->_retrievedRelations['address'];
    }

    return $this->_data['address'];
  }
}

Так можно ли использовать объект $ domain в методе getAddress и хранить информацию об отношениях в классе Person?

Пожалуйста, ответьте, потому что я искал ответ повсюду.

Ответы [ 2 ]

3 голосов
/ 28 декабря 2009

Взгляните на Zend_Db_Table Relationships . Они позволяют делать именно это и многое другое. Вы можете просто использовать Zend_Db_Table сегодня , вместо того, чтобы пытаться придумать собственную реализацию, или вы можете изучить код Zend Framework для их дизайнерских решений по вашим вопросам. Это довольно авторитетный источник.

2 голосов
/ 26 декабря 2009

Во-первых, я думаю, что название вопроса не очень понятно, во-вторых, я не Я абсолютно уверен, что понимаю, о чем идет речь ... По моему мнению, и заголовок, и сообщение действительно должны быть отредактированы, чтобы немного их очистить.

Пост содержит 5 вопросов (если перефразировать):

  1. Как можно было бы получить зависимый / родительский объект от сущности?
  2. Является ли $person->getAddress() хорошим способом получения объекта Address для человек из базы?
  3. Если это хороший способ сделать это, то как бы выглядел код?
  4. Можно ли использовать объект $ domain внутри метода getAddress?
  5. Можно ли хранить информацию об отношениях в классе Person?

Что касается ответов:

  1. В этом случае $person->getAddress() кажется хорошим выбором, вы знаете, хорошим и описательным. ; -)
  2. Я не вижу проблемы: Лицо ИМЕЕТ Адрес, чтобы получить адрес, который вы запрашиваете у объекта персоны is.
  3. Данный пример кода, кажется, отвечает этому, хотя он немного загроможден. Я бы только сделал адрес объекта-члена, но в остальном он в основном тот же
  4. & 5. Я бы сказал, что это в основном вопрос вкуса, приоритета и зависимости от дизайна. Там действительно нет четкого ответа на это. Кроме того, мы обсуждаем здесь семантику или сценарий реальной жизни?

Какой-то код, чтобы согласиться с ответом №3: (Я не мог заставить его работать должным образом в списке)

class Person {
    protected $_domain = null; // domain is assigned when instantiated
    protected $_address;        // object

    public function getAddress() {
        if (!isset($this->_address) ) {
            $this->_address = $this->_domain->getAddressForPerson($this); // assuming $this contains some sort of ID
        }
        return $this->_address;
    }
}
...