Frage

Wie man über das Abrufen ein abhängiges / übergeordnetes Objekts von einer Entität gehen.

$person->getAddress();

Dies sollte das Adressobjekt für diese Person aus der Datenbank abrufen und als Objekt zurück. Ist das ein guter Weg, es zu tun, und wie sollte den Code aussehen, wenn dies in Ordnung zu tun.

Auf diese Weise würde bedeuten, dass das Objekt selbst sollten sich bewusst sein, dass Adresse ist eine Einheit / Wert-Objekt, das es sich bezieht. Warum will ich diese Art von Syntax ist, weil es in der Präsentationsschicht sauber aussehen wird.

Die Person-Klasse würde wie folgt aussehen:

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'];
  }
}

So ist es in Ordnung, das $ Domain-Objekt innerhalb der getAddress Methode zu verwenden und Beziehungsinformationen in der Person-Klasse zu halten?

Bitte beantworten, weil ich überall nach einer Antwort suchen worden sind.

War es hilfreich?

Lösung

Hier finden Sie aktuelle Zend_Db_Table Relationships . Sie ermöglichen tun genau das, und vieles mehr. Sie können nur Zend_Db_Table verwenden heute , statt mit dem eigenen Implementierung zu kommen versuchen, oder können Sie Zend Framework Code für ihre Design-Entscheidungen wRT auf Ihre Fragen. Es ist durchaus eine maßgebliche Quelle.

Andere Tipps

Zuerst denke ich, der Titel der Frage nicht ganz klar ist, zweitens bin ich nicht ganz sicher, ich verstehe, was gefragt wird ... Meiner Meinung nach sowohl der Titel und die Post wirklich bearbeitet werden sollte es ein wenig aufzuräumen.

Die Post scheint 5 Fragen zu enthalten (wenn ich paraphrasieren könnte):

  1. Wie würde man gehen über ein abhängiges / übergeordnetes Objekt von einer Entität abrufen?
  2. Ist $person->getAddress() ein guter Weg, um das Adressobjekt für eine abzurufen Person aus der Datenbank?
  3. Wenn dies ein guter Weg, um es dann zu tun, was würde der Code aussehen?
  4. Ist es in Ordnung, das $ Domain-Objekt innerhalb der getAddress Methode zu verwenden?
  5. Ist es in Ordnung Beziehungsinformationen in der Person-Klasse zu halten?

Soweit Antworten gehen:

  1. In diesem Fall $person->getAddress() scheint eine gute Wahl, Sie wissen, schön und beschreibend. ; -)
  2. Ich sehe nicht ein Problem. Person HAS A Adresse, die Adresse, die Sie die Person, Objekt fragen zu bekommen für ist
  3. Das angegebene Codebeispiel scheint dies zu beantworten, obwohl es ein bisschen überladen ist. Ich habe nur Adresse ein Mitglied Objekt gemacht, aber anders als das, es ist meist das gleich
  4. & 5. Ich würde sagen, sind vor allem eine Frage des Geschmacks, Priorität und Design-Abhängigkeit. Es ist wirklich nicht eine saubere Schnitt Antwort. Auch wir sind hier Semantik oder ein wirkliches Leben Szenario?
  5. streiten

Einige Code mit Antwort Nr.3 gehen zusammen: (ich konnte es nicht in der Liste richtig funktioniert)

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;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top