Ich bin zur Zeit am Umstellen meiner Webseite auf OOP um den Mehrwert die Objekte mit sich bringen zu erhalten. Gerade Datensätze aus der Datenbank erhalten viele sinnvolle Methoden auch wenn es einen Overhead an Code mit sich bringt.
Die eigentliche Frage bzw das Problem mit dem ich mich zur Zeit beschäftige sind die Datenbankabfragen. Momentan laufen diese noch mit prozeduraler Programmierung, dh die Abfragen lauten z.B. selectNewsOrderdByTime(), welche die Objekte der Datensätze zurückgeben.
Dabei haben sich in der Vergangenheit und auch gerade beim Umschreiben zur Zeit immer wieder Probleme ergeben, dass ich gleich mehrere Abfragen ändern musste, wenn sich einzelne Punkte in der Datenbank ändern. Dies hatte ich nun gehofft duch OOP zu verhinden, aber dabei stoße ich immer wieder auf kleinere Probleme welche ich durch Tutorials zu ORM und Studieren von ORM Quellcode leider nicht lösen konnte... :/
Sobald ich die Funktionen nur in die Manager verteile erhalte ich keinen Mehrwert sondern maximal eine etwas bessere Struktur, aber das ist ja nicht wirklich sinnvoll...
Wenn ich nun versuche möglichst viel OOP zu benutzen, dann werden Abfragen extrem komplex und sehen plötzlich so aus:
Dieser riesen Code um nur eine einfache Abfrage zu erstellen, welche vllt in dem Code nicht schwer zu verstehen ist, aber schwer auf die schnelle zu überblicken um Änderungen vornehmen zu können.
Sobald es dann zu JOINs oder UNIONs kommt wird der Code extrem komplex bzw ich stoße mit meinem Design an viele Grenzen!
Daher meine Frage an euch: Wie desingt ihr eure Klassen für Datenbankabfragen gerade mit dem Hintergedanken von komplexere Abfragen? Nutzt ihr überhaupt sinnvoll OOP dafür oder sollte ich lieber bei einfachen Funktionen wie selectNewsOrderdByTime() für die Abfragen bleiben?
Ich weiß diese Frage ist sehr komplex und es gibt auch ein paar Themen dazu, aber vielfach wurden nur Ansätze anderer diskutiert und nicht über eine möglichst gute Methode gesprochen!
Ich hoffe ich werde ein paar interessante Anregungen bekommen, DANKE! =)
Grüße, Sirke
Die eigentliche Frage bzw das Problem mit dem ich mich zur Zeit beschäftige sind die Datenbankabfragen. Momentan laufen diese noch mit prozeduraler Programmierung, dh die Abfragen lauten z.B. selectNewsOrderdByTime(), welche die Objekte der Datensätze zurückgeben.
Dabei haben sich in der Vergangenheit und auch gerade beim Umschreiben zur Zeit immer wieder Probleme ergeben, dass ich gleich mehrere Abfragen ändern musste, wenn sich einzelne Punkte in der Datenbank ändern. Dies hatte ich nun gehofft duch OOP zu verhinden, aber dabei stoße ich immer wieder auf kleinere Probleme welche ich durch Tutorials zu ORM und Studieren von ORM Quellcode leider nicht lösen konnte... :/
Sobald ich die Funktionen nur in die Manager verteile erhalte ich keinen Mehrwert sondern maximal eine etwas bessere Struktur, aber das ist ja nicht wirklich sinnvoll...
Wenn ich nun versuche möglichst viel OOP zu benutzen, dann werden Abfragen extrem komplex und sehen plötzlich so aus:
PHP-Code:
$newsmanager = new NewsManager( $datenbank );
$newsmanager->addSelect( 'news_id' , 'news_title', 'news_text', 'news_language' );
$newswhere = new WhereCondition( WhereCondition::AND );
$newssubwhere = new WhereCondition( WhereCondition::OR );
$newswhere->addGreaterOrEqual( 'news_time', 12345678 );
$newswhere->addWhereCondition( $newssubwhere );
$newssubwhere->addEqual( 'news_language', 'de' );
$newssubwhere->addEqual( 'news_language', 'en' );
$newsmanager->addWhereCondition( $newswhere );
$newsmanager->addOrderBy( 'news_time', true );
$news = $newsmanager->query();
Sobald es dann zu JOINs oder UNIONs kommt wird der Code extrem komplex bzw ich stoße mit meinem Design an viele Grenzen!
Daher meine Frage an euch: Wie desingt ihr eure Klassen für Datenbankabfragen gerade mit dem Hintergedanken von komplexere Abfragen? Nutzt ihr überhaupt sinnvoll OOP dafür oder sollte ich lieber bei einfachen Funktionen wie selectNewsOrderdByTime() für die Abfragen bleiben?
Ich weiß diese Frage ist sehr komplex und es gibt auch ein paar Themen dazu, aber vielfach wurden nur Ansätze anderer diskutiert und nicht über eine möglichst gute Methode gesprochen!
Ich hoffe ich werde ein paar interessante Anregungen bekommen, DANKE! =)
Grüße, Sirke
Kommentar