php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 13.02.2011, 00:16  
Erfahrener Benutzer
 
Registriert seit: 06.11.2008
Beiträge: 212
stayInside befindet sich auf einem aufstrebenden Ast
Standard TableDataGateway / ActiveRecord Pattern

Hallo,

ich habe mal ein paar Fragen bezüglich der im Titel stehenden Pattern.

Zunächst aber einmal ein Beispiel. In meiner Firma haben wir bestimmte Models um Daten aus einer Datenbank zu ermitteln. Angenommen die Tabelle heisst "User". Nun gibt es 2 Models, eins heisst User (extends DatabaseTableModel), das andere UserList (extends DatabaseTableListModel implements Iterrator).

Wenn man nun 1 Datensatz auslesen (CRUD) will nimmt man das User-Objekt. Möchte man mehrere Datensätze auslesen (CRUD) muss man das UserList-Objekt nehmen.

Ein UserList-Objekt enthält für jede Zeile in der Datenbank ein User-Objekt. Durch die Implementierung des Iterrators kann man das Objekt in einer foreach durchschleifen.

Darin seh ich allerdings mehrere Nachteil. Man muss 2 User-Models pflegen und natürlich auch die DatabaseTableModel und DatabaseTableListModel Klasse.

Bei Zend habe ich es so verstanden, das die im Endeffekt nur das UserList-Objekt hätten, dieser beinhaltet dann aber kein User-Objekt pro Zeile sondern ein UserList-Objekt pro Zeile. Sehe ich das richtig? Dann hätte also jede einzelne Zeile den Iterrator implementiert?

Ist der Weg den meine Firma da geht überhaupt ein "vernünstiges" Pattern? Besser gesagt, ist es eins aus dem Titel genannten Pattern?

Gruß
stayInside ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.02.2011, 03:28  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Bist du sicher das das UserList-Objekt nicht mehrere User-Objekte erzeugt und nur die Collection repräsentiert und den Iterrator natürlich dafür implementiert ? Wär' ja wohl schwachfug wenn man das schon bereitstellt die zuvor erzeugte Klasse nochmal aufzupinnen für "viele User"...

User -> AR Pattern
UserList -> TDG Pattern

Insofern man unbedingt granulieren möchte und die Klassen auch wirklich read/write implementieren und nicht nur read, ja. Aber was spricht dagegen das Multi-Row Objekt zu benutzen um 1 Row aus der DB zu holen ?
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 13.02.2011, 20:30  
Erfahrener Benutzer
 
Registriert seit: 06.11.2008
Beiträge: 212
stayInside befindet sich auf einem aufstrebenden Ast
Standard

Spricht ja nichts gegen das Multi-Row Objekt für 1 Eintrag zu nutzen. Nur hat das Multi-Row pro Eintrag ein Objekt ala AR Pattern oder einfach nur ein Array mit den Daten?
stayInside ist offline   Mit Zitat antworten
Alt 17.02.2011, 09:50  
Benutzer
 
Registriert seit: 06.01.2011
Beiträge: 36
PHP-Kenntnisse:
Fortgeschritten
mbunge befindet sich auf einem aufstrebenden Ast
Standard

Zum Verständnis, da ich mit der OO-Datenbankmaterie noch nicht 100% vertraut bin:

Ich verstehe das gerade so, dass man Zugriff auf ein einzelnes User-Objekt über die User-Klasse bekommt. über UserList bekommt man dann Zugriff auf das User-Objekt während der Iteration, wie oben geschrieben eine Collection.

Daher muss eigentlich nur das User-Objekt gepflegt werden, da hier da Userdaten abgefragt werden?

Ich meine im AR-Pattern gibt es auch die möglichkeiten, neben einen einzelnen Datensatz (get, find, read) auf alle Datensätze (getAll, findAll, readAll) zu zugreifen. Damit kann man doch auch über Iteration per Foreach zugreifen. Wäre dieses vorgehen nicht komfotabler?

MfG
Marco
mbunge ist offline   Mit Zitat antworten
Alt 18.02.2011, 13:54  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zitat:
Darin seh ich allerdings mehrere Nachteil. Man muss 2 User-Models pflegen und natürlich auch die DatabaseTableModel und DatabaseTableListModel Klasse.
Du pflegst ganz einfach alles was zum User gehört in der User-Klasse, bspw. eine confirm()-Methode und alles was du brauchst um User zu holen kommt in die UserList-Klasse, bspw. eine getConfirmedUser()-Methode.

Da ist dann nichts doppelt und alles ist schön aufgeräumt.
cycap ist offline   Mit Zitat antworten
Alt 19.02.2011, 03:00  
Erfahrener Benutzer
 
Registriert seit: 06.11.2008
Beiträge: 212
stayInside befindet sich auf einem aufstrebenden Ast
Standard

Also ich habe es nun wie folgt aufgebaut. Ich habe folgene "core" Models von denen abgeleitet werden kann.

RowModel - ist die Grundlage für ein Singleline Model (kein Datenbankzugriff)
DatabaseRowModel (extends RowModel) - hat Zugriff auf die Datenbank und diverse Datenbank-Methoden. Die Daten werden dann ins RowModel gespeichert

RowsetModel (implements Iterator) - ist die Grundlage für ein Multiline Model (kein Datenbankzugriff)
DatabaseRowsetModel (extends RowsetModel) - hat Zugriff auf die Datenbank und diverse Datenbank-Methoden. Die Daten werden dann ins RowsetModel gespeichert

Nun kann man wie folgt vorgehen:

User extends DatabaseRowModel - damit kann man zum Beispiel Methoden aufrufen ala "loadDataByPrimary(2)". Lädt dann die Daten des Users wo der Primary-Key 2 ist

Wenn man allerdings mehre User auslesen möchte muss man ein weiteres Model anlegen:

UserRowset extends DatabaseRowsetModel - nun kann man zum Beispiel folgende Methoden aufrufen "loadDataByField('user_id', array(1,2,3,4)). Lädt nun alle User mit der user_id 1-4. Würde man sich das 1. Objekt vom Rowset ausgeben lassen (*->current()) würde dies dem Objekttypen "User" besitzen.

Ist dies soweit sauber umgesetzt oder gibt es was auszusetzen?
stayInside ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Pattern Prototype __clone() coola PHP Einsteiger 5 08.02.2011 13:17
Interface in Klasse richtig benutzen, Strategie Pattern litterauspirna PHP Tipps 2010 4 24.11.2010 13:59
MVC - Pattern & Smarty ToxicToast PHP Tipps 2010 10 29.09.2010 15:35
[url] Pattern Ersetzen mit Suchausdruck KD. PHP Tipps 2010 10 21.09.2010 18:53
Multidimensionales Array & Registry Pattern Knechtle PHP Tipps 2010 9 21.05.2010 10:26
preg_replace() Reference in Pattern einsetzen? hondatuner PHP Tipps 2010 3 01.04.2010 01:21
Design Pattern BlackScorp PHP Tipps 2009 7 06.01.2010 19:04
Welches Pattern? Creator PHP-Fortgeschrittene 19 14.04.2009 21:46
[Erledigt] preg_match und die Pattern Spoiler PHP Tipps 2009 9 13.02.2009 08:29
Formulargenerierung | Composite Pattern moveax1 PHP-Fortgeschrittene 13 27.01.2009 09:44
Design Pattern Harry B. Software-Design 7 02.09.2008 20:49
[Erledigt] Design Pattern - MySQL Sitzung in allen Objekten nutzen PHP-Fortgeschrittene 21 28.04.2005 22:18
Folgendes Pattern PHP Tipps 2005 5 01.03.2005 12:41
Probleme mit Pattern bei Templateersetzung RudiS PHP-Fortgeschrittene 2 19.02.2005 22:09
preg_match --> pattern PHP Tipps 2004 4 27.08.2004 18:12

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
active record pattern, php activerecord, gateway pattern database, table data gateway pattern, table gateway pattern php, active record row data gateway, php table gateway pattern, table-data-gateway, php active record, active table pattern, table data gateway pattern php, row table gateway pattern php, list tables() example zend, active-record pattern php, design pattern tabledatagateway, php table data gateway, gateway pattern php, active record row data gateway table, php \object mehrere datensätze, php record lesen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum