Moin,
vor einem Jahr habe ich angefangen mir einen ORM selber zu basteln. Dabei war für mich wichtig, das die stärken beider Systeme (also Datenbank und Objekt) ausgenutzt werden. Daraus entstand ein äußerst effektives Entity-Objekt model, dass bis heute sehr einfach sehr gute Dienste leistet.
Es dreht sich dabei alles um die Entitys, welche bei mir Objekte sind. Eine Entity hat als Konstante alle Felder der Datenbank drin. Somit dient es gleichzeitig als Abstraktionsschicht, falls sich die Datenbank bzw. die Feldernamen ändern. Dreh und angelpunkt ist ebenfalls die Vererbung des ArrayObjectes. Das ist eine Mischform zwischen Objekt und Array.
Ein Beispiel:
class cEntity extends ArrayObject
{
const nameTableName = "TABLE";
const nameKeyName = "TABLE_ID";
const nameField = "FIELD";
public function method(){}
}
$objEntity = new cEntity();
$objEntity[$objEntity::nameField] = "Value";
echo $objEntity[$objEntity::nameField]; //--- Value
Wie man sieht entfallen hier komplett die get und setter Methoden. Vorteil man muss weniger Methoden definieren. Nachteil, mann muss für jedes Feld eine Konstante definieren.
Dazu habe ich mir noch eine Abstraktionsebene vom PDO Objekt gebastelt. Das spuckt mir bei einer Datenbankabfrage die Entitys als Objekte aus.
Ein weiterer Vorteil ist, dass die jede ein oder ausgabe über eine Methode läuft offsetGet und offsetSet. Möchte man also einen Wert überprüfen oder abfangen, kann man das in diesen zwei magischen Methoden machen.
Soweit ein kleiner Einblick. Wenn interesse besteht kann ich gern mehr Erläutern.
Gruß
MRO MOR ROM RMO OMR ORM (na endlich)
T-Rex