Integrierte Objekte speichern

Speichert man integrierte Objekte, so entstehen zum einen Duplikate und zum anderen sind die gespeicherten Objekte sehr groß. Im folgenden Beispiel würde $obj sowohl das Objekt A, als auch das Objekt B enthalten.

class A extends \Alvine\Core\Alvine {

    public $sub;

}

class B extends \Alvine\Core\Alvine {

    public $value;

}

$subobject=new B();
$subobject->value='my object value';

// Objekt 1
$obj1=new A();
$obj1->sub=$subobject;

// Objekt 2
$obj2=new A();
$obj2->sub=$subobject;

Obwohl B von Objekt 1 und Objekt 2 identisch ist, würde das Objekt B bei der Verwendung des ObjektStorage zweimal abgespeichert. Will man zudem den Wert B::value ändern, müsste man beide Objekte laden und den Wert in beiden Objekten ändern.

Setzt man vor die Eigenschaft den Prefix associated, so wird beim speichern und laden des Objektes nur eine Kopie des Objekts im Storage gespeichert.

class A extends \Alvine\Core\Alvine {

    public $associatedSub;

}

class B extends \Alvine\Core\Alvine {

    public $value;

}

$subobject=new B();
$subobject->value='my object value';


// Objekt 1
$obj1=new A();
$obj1->associatedSub=$subobject;


// Objekt 2
$obj2=new A();
$obj2->associatedSub=$subobject;

Im zweiten Beispiel werden nicht zwei, sondern drei Objekte in die Datenbank geschrieben.

Kommentare