![]() |
| | LinkBack | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Gabriel Registriert seit: 27.09.2006 Ort: Radebeul
Beiträge: 456
|
Hi, kann mir jemand irgendwie ein Tutorial geben wo das Table Data Gateway Pattern erklärt wird? In meinem Buch (PHP Design Patterns) wird an der Stelle einfach auf Propel verwiesen. Das nützt mir ja nichts.
__________________ Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed Kanedo CMS Projektseite: http://kanedo.redio.de/de/ RSS: http://kanedo.redio.de/rss.php |
| | |
| | Nach oben #2 |
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 198
|
Hallo Gabriel, beim TDGW-Pattern handelt es sich - kurz gesprochen - um einen Wrapper auf eine Tabelle. Implementierst du das, sollte deine Klasse die Methoden delete(), update() delete(), ... haben. Sollte dich das Thema Mapping interessieren, kannst du ja auch mal unter http://de.adventure-php-framework.or...cher-OR-Mapper vorbeischaun.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> http://adventure-php-framework.org)! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | Nach oben #3 | |
| Gabriel Registriert seit: 27.09.2006 Ort: Radebeul
Beiträge: 456
| Zitat:
Soll ich wirklich eine Abstrakte klasse machen á la: PHP-Code:
__________________ Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed Kanedo CMS Projektseite: http://kanedo.redio.de/de/ RSS: http://kanedo.redio.de/rss.php | |
| | |
| | Nach oben #4 |
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 198
|
Hallo Gabriel, ja, es sollte abstrakt sein. Das erreichst du durch eine Art "auto-discover", sprich die Factory, die dir dein konkretes gateway erstellt wird mit dem Namen der Tabelle initialisiert und erzeugt das Gateway mit den wichtigen Informationen über die Tabelle. Andere Möglichkeit ist eine Konfiguration, die die interessanten Parameter beinhaltet und diese beim Erstellen des konkreten Gateways diese and Hand eines Init-Parameter an die Fabric erzeugt. Letzteres habe ich für den GenericORMapper gewählt. Allerdings würde ich die Klasse zwar mit "abstract" bezeichnen, sie jedoch nicht als "abstract" deklarieren, denn über die Factory ist sie ja konkret anwendbar.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> http://adventure-php-framework.org)! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | Nach oben #5 |
| Gabriel Registriert seit: 27.09.2006 Ort: Radebeul
Beiträge: 456
|
Ich muss sagen, erstere Möglichkeit klingt sehr verlockend. Nur hab ich noch keinen Schimmer wie ich das Umsetzen söllte, oder vlt hab ich auch einfach falsch vorstellungen. Das Factorypattern fasst ja letztlich alle gleichen Methoden zusammen und lässt nur die Initialisierung eines Objekts offen, oder irre ihc mich da? Iwie stehe ich grad derbste aufm Schlauch!
__________________ Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed Kanedo CMS Projektseite: http://kanedo.redio.de/de/ RSS: http://kanedo.redio.de/rss.php |
| | |
| | Nach oben #6 |
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 198
|
Hallo Gabriel, ich vermute, du stellst dir das Thema zu schwer vor. Ich helfe dir mal mit ein bischen Quellcode: PHP-Code: Ich hoffe, das hilft dir als Gedanken-Anstoss weiter. :)
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> http://adventure-php-framework.org)! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | Nach oben #7 |
| Gabriel Registriert seit: 27.09.2006 Ort: Radebeul
Beiträge: 456
|
Würde ich dann meine Konkreten klassen (also zum Beispiel eine Navigation) von AbstractTableDataGateWay ableiten und noch ein paar mehr Funktionen implementieren? Aber vielen Dank erstmal so Grundsätzlich für deine Hilfe. Hilfst mir ja nun nicht zum erstenmal auf die Srpünge!
__________________ Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed Kanedo CMS Projektseite: http://kanedo.redio.de/de/ RSS: http://kanedo.redio.de/rss.php |
| | |
| | Nach oben #8 | ||
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 198
| Zitat:
Der Manager wiederum nutzt das AbstractTableDataGateWay (abstract hier einfach, weil das Teil generisch wiederverwendbar ist) dann als Datenschicht seiner Anwendung. Sollte es mit dem TDGW nicht möglich sein auf einfache Weise die Anforderungen des Managers zu befriedigen, würde ich noch eine eigene Datenschicht für deine Menü-Komponente spendieren, die jedoch auch die TDGW-Komponente als Data-Access-Layer nutzt. Direkt erben hat den Nachteil, dass du dir eine direkte Abhängigkeit schaffst, die es nicht erlaubt, deine DAO-Komponente gegen eine andere der gleichen API auszutauschen. Möchtest du z.B. später - weil das TDGW nicht mehr den Anforderungen entspricht - einen GenericORMapper einsetzen, so kannst du einfach eine Zeile austauschen und bist fertig. :) Zitat:
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> http://adventure-php-framework.org)! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| | |
| | Nach oben #9 |
| Gabriel Registriert seit: 27.09.2006 Ort: Radebeul
Beiträge: 456
|
Das Problem bei der "Abstrakten" Klasse ist ja aber genau das, dass sie abstrakt ist. Also keine für den Anwendungszweck zugeschnittenen Methoden hat. Letztlich müsste ich mich dann im Navimodul trotzdem um SQL Code kümmern. Das ist ja nicht Sinn der Sache, oder hab ich jetzt schon 9:00 Uhr am Morgen ne Denkblockade Noch eine Frage die sich mir gerade stellt: Ist die Factoryklasse dann eigentlich im Singletonepattern implementiert? Sonst würde der Cache ja mal so gar nichts bringen oder?!
__________________ Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed Kanedo CMS Projektseite: http://kanedo.redio.de/de/ RSS: http://kanedo.redio.de/rss.php Geändert von kampfgnom (23.10.2008 um 09:02 Uhr) Grund: Zusatz |
| | |
| | Nach oben #10 | |||
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 198
|
Hallo Gabriel, Zitat:
Zitat:
Zitat:
PHP-Code:
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> http://adventure-php-framework.org)! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Geändert von dr.e. (23.10.2008 um 10:29 Uhr) Grund: removed typo | |||
| | |
| | Nach oben #11 |
| Gabriel Registriert seit: 27.09.2006 Ort: Radebeul
Beiträge: 456
|
Was sagst du dazu: PHP-Code: Was meisnt du?!
__________________ Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed Kanedo CMS Projektseite: http://kanedo.redio.de/de/ RSS: http://kanedo.redio.de/rss.php |
| | |
| | Nach oben #12 | |||
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 198
|
Hallo Gabriel, Zitat:
Zitat:
Zitat:
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> http://adventure-php-framework.org)! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |||
| | |
| | Nach oben #13 | ||||||
| Gabriel Registriert seit: 27.09.2006 Ort: Radebeul
Beiträge: 456
| Zitat:
Zitat:
Zitat:
Die Methoden die man implementieren kann, dass sie auf alle Tabellen passen sind viel zu abstrakt als das sie nützlich wären.
__________________ Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed Kanedo CMS Projektseite: http://kanedo.redio.de/de/ RSS: http://kanedo.redio.de/rss.php | ||||||
| | |
| | Nach oben #14 | |||
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 198
| Zitat:
Zitat:
Zitat:
BTW: NestedSets sind auch eine denkbar schlechte Anwendung für das TDGW.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> http://adventure-php-framework.org)! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |||
| | |
| | Nach oben #15 | |
| Gabriel Registriert seit: 27.09.2006 Ort: Radebeul
Beiträge: 456
| Das glaub ich auch Zitat:
Allerdings habe ich eine Frage zu deinem Vorher geposteten Quellcode. Du übergibst ein $DatabaseDriver. Was genau kann der? Bisher hab ich eine Verbindungsklasse, die mit Api klassen versorgt wird. So wird sichergestellt, das die Verbindung über eine Art Proxy unabhängig von der Verwendeten Datenbank möglich ist. Diese API Klassen implementieren alle ein Interface. Aber die machen letztlich nichts anderes als die Verbindung aufzubauen und die Verbindungsressource zurück zugeben. Sollte ich da schon verschiedene Fkt wie Select, Update, Delete, etc. einbauen. Bzw. ist meine "API Klasse" das was bei dir der DatabaseDriver ist? Vielleicht komme ich so schneller dahinter wie das funktioniert.
__________________ Mein Blog: http://aedo.redio.de RSS: http://aedo.redio.de/feed Kanedo CMS Projektseite: http://kanedo.redio.de/de/ RSS: http://kanedo.redio.de/rss.php | |
| | |
| | Nach oben #16 |
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 198
|
Hallo Gabriel, der DatabaseDriver ist eine Service-Schicht, die den Zugriff auf die Datenbank abstrahiert. Diese bietet Methoden wie executeStatement() bzw. fetchData(). Eine Definition so einer Klasse findest du unter http://adventure-php-framework.org/f...l_handler.html Im APF abstrahiere ich eine konkrete Datenbank-Verbindung noch mit dem connectionManager, der als Datenbank-Verbindungs-Factory dient. Eine konkrete Implementierung einer Methode kann dabei im APF wie folgt aussehen: PHP-Code: Soweit klar?
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> http://adventure-php-framework.org)! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| MySQL 5.1 kommt in die Beta-Phase | Ben | Nachrichten | 1 | 02.03.2006 14:31 |