Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort des Fachgutachters
Vorwort
1 Einleitung
2 Einführung in eZ Components
3 Die Applikationsbasis
4 Fehlerbehandlung und Debugging
5 Konfiguration
6 Datenbankanbindung
7 ORM mit PersistentObject
8 Template
9 Übersetzung
10 Benutzereingaben validieren
11 Authentifizierung
12 Bildverarbeitung
13 Archive und Dateien
14 Mail
15 Logging
16 Diagramme
17 Feeds und Caching
18 Setup
A Inhalt der Buch-CD
Stichwort

Download:
- ZIP, ca. 2,7 MB
Ihre Meinung?

Spacer
<< zurück
eZ Components von Tobias Schlitt, Kore Nordmann
Das Entwickler-Handbuch
Buch: eZ Components

eZ Components
geb., mit CD
454 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1073-7
Pfeil 7 ORM mit PersistentObject
Pfeil 7.1 Modell-Klassen
Pfeil 7.2 Konzepte
Pfeil 7.2.1 Active Record
Pfeil 7.2.2 Row Data Gateway
Pfeil 7.2.3 Persistent Object
Pfeil 7.3 Konfiguration
Pfeil 7.3.1 Basiskonfiguration
Pfeil 7.3.2 Relationen beschreiben
Pfeil 7.4 Benutzung
Pfeil 7.4.1 Eine Persistenz-Sitzung erzeugen
Pfeil 7.4.2 Objekte auffinden
Pfeil 7.4.3 Objekte manipulieren
Pfeil 7.5 Erweiterte Möglichkeiten
Pfeil 7.5.1 Über Abfragen manipulieren
Pfeil 7.5.2 Werte auffrischen
Pfeil 7.5.3 Direkt mit der Datenbank arbeiten
Pfeil 7.6 Fazit

Die PersistentObject-Komponente bietet Ihnen eine weitere Abstraktionsschicht zwischen dem Datenbanksystem und der Applikationslogik.

7 ORM mit PersistentObject

In Kapitel 6, »Datenbankanbindung«, haben Sie den Zugriff auf ein relationales Datenbanksystem mit Hilfe der Database-Komponente kennengelernt. Nun werden wir Ihnen die PersistentObject-Komponente vorstellen, mit der eine weitere Abstraktionsschicht zwischen dem Datenbanksystem und der Applikationslogik gezogen werden kann.

Über sogenanntes Objekt-Relationales-Mapping (ORM) erlaubt es die Komponente PersistentObject, PHP-Objekte (für Sie als Entwickler weitestgehend transparent) in einer relationalen Datenbank abzulegen. Mit Hilfe der Komponente werden Ihnen die typischen Aufgaben beim Zugriff auf Objekte in der Datenbank erleichtert, indem das

  • Laden,
  • Speichern,
  • Löschen,
  • Aktualisieren und
  • Suchen

von Objekten auf einfachem Wege ermöglicht wird.


Galileo Computing - Zum Seitenanfang

7.1 Modell-Klassen topZur vorigen Überschrift

Wie Sie bereits aus Kapitel 3, »Die Applikationsbasis«, wissen, baut das GP-Blog auf einer Implementierung des Model-View-Controller-Entwurfsmusters auf, wobei die Controller-Architektur bereits im gleichen Kapitel vorgestellt wurde. In diesem Kapitel widmen wir uns der Umsetzung der Modelle, also den Datenobjekten, welche im Laufe der Applikation von Controller-Objekten manipuliert und von der View dargestellt werden. Das View-Modul wird passend dazu in Kapitel 8, »Template«, entwickelt.

Im Galileo-Press-Blog werden drei verschiedene Modell-Klassen verwendet: gpBlogEntry zur Repräsentation eines Blog-Eintrags, gpBlogComment, deren Instanzen einen Kommentar darstellen, und gpBlogTag, mit deren Hilfe ein Tag modelliert wird. Da Objekte dieser Klassen reine Datenspeicher darstellen, sind sie nur sehr rudimentär implementiert, machen allerdings erneut Gebrauch vom Konzept der Virtual Properties, welches Sie bereits in Kapitel 2, »Einführung in eZ Components«, und in Kapitel 3, »Die Applikationsbasis«, kennengelernt haben.

class gpBlogEntry
{
    protected $properties = array(
        "id"    => null,
        "body"  => null,
        "date"  => null,
        "title" => null,
    );
    public function __construct()
    {
    }
    public function getState()
    {
        return $this->properties;
    }
    public function setState( array $state )
    {
        foreach ( $state as $propertyName => $propertyValue )
        {
            if ( isset( $this->$propertyName ) )
            {
                $this->properties[$propertyName] =
                    $propertyValue;
            }
        }
    }
    public function __get( $propertyName )
    {
        if ( isset( $this->$propertyName ) )
        {
            return $this->properties[$propertyName];
        }
        throw new gpBlogPropertyNotFoundException(
            $propertyName
        );
    }
    public function __set( $propertyName, $propertyValue )
    {
        if ( $propertyName === "id" )
        {
            throw new gpBlogPropertyPermissionException(
                $propertyName,
                gpBlogPropertyPermissionException::READ
            );
        }
        if ( isset( $this->$propertyName ) )
        {
            $this->properties[$propertyName] = $propertyValue;
            return;
        }
        throw new gpBlogPropertyNotFoundException(
            $propertyName
        );
    }
    public function __isset( $propertyName )
    {
        return array_key_exists(
            $propertyName,
            $this->properties
        );
    }
}

Listing 7.1 Die gpBlogEntry-Modell-Klasse

Die Eintragsklasse implementiert die Overloading-Methoden __get(), __set() und __isset() zum Zugriff auf die Virtual Properties der Klasse: $id, $body, $date und $title. Die Kapselung dieser Attribute mit Hilfe des Virtual-Property-Konzepts erfolgt an dieser Stelle zum Schutz des Attributs $id, welches ausschließlich von der Datenbank vergeben wird. Wie Sie im vorhergehenden Kapitel gesehen haben, verwenden wir einen auto_increment-Mechanismus dafür. Falls versucht wird, das so geschützte Attribut direkt zu verändern, wird eine gpBlogPropertyPermissionException geworfen; der Lese-Zugriff hingegen ist erlaubt. Die genannte Exception erweitert nach dem Konzept, das wir bereits in Kapitel 3, »Die Applikationsbasis«, verwendet haben, lediglich die passende eZ Components-Exception zum Zweck der Unterscheidung beim Fangen der Exceptions im Haupt-Controller.

Neben dem Virtual-Property-Zugriff implementiert die gezeigte Modell-Klasse zwei weitere Methoden namens getState() und setState(). Diese werden von PersistentObject verwendet, um den Status eines Objekts zu extrahieren und in die Datenbank zu speichern – getState() beziehungsweise, um auf dem umgekehrten Weg den Status des Objekts wiederherzustellen – setState(). Beide Methoden werden im Interface ezcPersistentObject definiert und arbeiten mit Array-Repräsentationen des Objekt-Status, indem die Attribute des Modells in einem assoziativen Array gespeichert werden, das die Attributnamen als Schlüssel benutzt. getState() gibt diese Objektrepräsentation zurück, setState() verarbeitet sie und setzt die entsprechenden Werte der Objekt-Attribute. Auch in diesen beiden Methoden kommt die Verwendung von Virtual Properties der Entwicklung zugute, denn intern wird sowieso nur mit einem $properties-Array gearbeitet.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: PHP 5.3 und MySQL 5.1






 PHP 5.3 und
 MySQL 5.1


Zum Katalog: Besser PHP programmieren






 Besser PHP
 programmieren


Zum Katalog: Webshops mit Magento






 Webshops mit
 Magento


Zum Katalog: Sichere Webanwendungen






 Sichere
 Webanwendungen


Zum Katalog: PHP 5.3 und MySQL 5.1 - Videotraining






 PHP 5.3 und
 MySQL 5.1 -
 Videotraining


Zum Katalog: Apache 2






 Apache 2


Zum Katalog: Suchmaschinen-Optimierung für Webentwickler






 Suchmaschinen-
 Optimierung
 für Webentwickler


Zum Katalog: Joomla! 1.5






 Joomla! 1.5


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de