| | | | |
| |||||||
| Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |||||||||||
| Moderator Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Gerade Datenbank-Abstraktionen gibt es ja zuhauf ... aber egal ![]() Also gerade wenn du eine Abstraktion entwickeln willst solltest du das ja z.b. auch mit mehr als einem Datenbank-System testen, also nicht nur mysql, sondern auch, postgresql, sqlite, mssql, oracle, ... -> PHP: PDO Drivers - Manual Allein das alles aufzusetzen, unittests zu schreiben für die einzelnen Systeme ... ausserdem das ganze Wissen über die systeme, ihre Eigenheiten, um auch halbwegs gut testen zu können (Und zu wissen WAS deine Grundklasse/Interface alles können muss, sonst kannst du die abstraktion in der pfeife rauchen) ... was man alles beachten muss, was welche systeme unterstützen und was nicht, welche zeichen nutzt man um spaltennamen, welche um tabellennamen, welche um datenbanknamen (Abhängig vom System und Fall können das Backticks (`), anführungszeichen ("), hochkomma('), .... ), welche Mechanismen haben andere systeme, stichwort auto_increment bei mysql/sqlite und bei anderen DBMS sind das Sequenzen, .... . Wie unterstützt du nützliche Features die vielleicht nicht alle Systeme können (oder noch schlimmer nicht jedes Backend eines Systems ?) z.b. Transaktionen. Wie behandelst du Datentypen beim escapen, was für Datentypen MUSS es geben, fürs escapen im hinblick auf verschiedene DBMS (muss man vielleicht für ein dbms gewisse werte anders escapen ... ) inwieweit gibt es Spezialfälle in Systemen die der Adapter abdecken/unterstützen muss. Wie werden Datentypen beim abrufen behandelt, geben Systeme integer auch als integer zurück oder nicht ? Gibt es da eventuell Probleme mit überläufen, ... ) Ausserdem wenn du richtig abstrahierst, heißt das nicht einfach PDO nutzen, sondern für JEDES DBMS einen passenden wrapper um PDO zu schreiben, da sie wie schon erwähnt verschiedene Zeichen für um Tablennamen, Spaltennamen, Datenbanknamen und Werte besitzen ... Und dann ist es auch kein problem (nur zeitlicher aufwand für schreiben + tests ) für alle user die kein pdo haben je einen eigenen datenbank-adapter zu schreiben für die nativen mysql/mysqli/sqlite-funktionen. Das ist ja eben sinn und zweck von solchen systemen, dass man beliebig die adapter austauschen kann, bedeutet aber dass du für eine vernünftige datenbank-abstraktion dich erstmal mit allen "potentiellen" systemen auseinandersetzen musst. Auch die Entscheidung inwieweit du z.b. prepared statements nativ nutzt oder extra unterstütztst und was du bei extensions machst die das nicht unterstützen ? Selbst wrappen ? Oder throw new Exception('Feature not supported on FOO-DBMS'); Ausserdem schau dir mal andere Systeme an die Abstraktion bieten, ADODB, Zend_Db oder einen Schritt weiter gehen Richtung ORM: Doctrine, Propel. Und dann schau wie viel CODE dahinter steckt, was an unittests vorhanden ist (insbesondere wie viele teilweise auch dbms-spezifische bugs es gab und für die dann tests existieren und soweiter, das Rad neu zu erfinden bedeutet ein verdammt großes Rad mit vielen kleinen drin neu zu erfinden, wenn du wirklich die tausendeste Abstraktion schreiben willst und nicht den eine million und ersten OOP-wrapper um db-funktionen ![]() So genug allgemeines, jetzt detailiert zu deinem Post ![]() Zitat:
Zitat:
Sowas wie public function fetch_array()... hat nichts in der Datenbanklasse zu suchen sondern dann im Result. (Natürlich ein stark vereinfachtes Beispiel) Macht das Sinn? Würde ich die PDO verwenden bliebe mir dieser Zusatzaufwand erspart. Nur wäre PDO dann eine (ggf. weitere) Abhängigkeit ohne die mein System nicht lauffähig wäre. [/quote] Wie schon gesagt, nein, bleibt er nicht, bei ner Abstraktion musst du dich um mehr kümmern, weil du ja z.b. dann auch sowas hast: Zitat:
Zitat:
P of EAA: Table Data Gateway P of EAA: Row Data Gateway P of EAA: Active Record P of EAA: Data Mapper P of EAA: Query Object Allgemein kannst du ja mal Catalog of Patterns of Enterprise Application Architecture durchschauen was es noch an Patterns gibt die für eine Abstraktion Sinn machen (können) und was dir davon mehr liegt oder nicht. [quote] Meine Frage an euch ist nun wie sinnvoll es ist ein ähnliches System in PHP umzusetzen. Als Beispiel nehemn wir eine Klasse Database welcher im Konstruktor ein Objekt übergeben bekommt welches das Interface IDatabaseConnection implementiert. Die Database-Klasse stellt Methoden zur Verfügung wie getTable() über welche man sich für eine bestimmte Tabelle ein DBTableObjekt holen kann um Felder oder Zeilen auszulesen welche durch DBFieldund DBRow Objekte repräsentiert werden. Zitat:
Zitat:
Z.b. Welche Arten von joins welche systeme unterstützen und soweiter .... Zitat:
Das Rad neu zu erfinden.Was mich gerade etwas stört ist das Gefühl dass du eine spontane Idee hattest ohne zu wissen auf was du dich einlässt. Du hast dir wahrscheinlich noch nicht andere Abstraktionen und ORM-Systeme mal mehr als nur flüchtig angeschaut um abschätzen zu können was auf dich zukommt. Die Begrifflichkeiten im Text klingen so wie wenn du dir auch in Frage kommende Pattern nicht wirklich ein Begriff sind, was bei einem solchen Projekt zwangsläufig Pflicht ist. Zitat:
Und das ist mit allem dem was du gerne willst (und was dir während der konzeption vielleicht noch an Ideen kommt) meiner Meinung nach ein um ein vielfaches größeres Rad als die MVC/Routing/Mailing/Caching/Form-Räder zusammen ![]()
__________________ robo47.net - Blog, Codeschnipsel und mehr | | ||||||||||
| | |
| | |
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 34.247
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Oh man, ich liebe es, wenn Robo seine Monsterantworten rausfeuert.
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- |
| | |
| | |
| Moderator Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Viel mehr als bissel Texte tippen und mal ne webseite aufmachen gab mein Notebook die letzte Stunde aufgrund von installations und kompilierungs-arbeiten (aktuelles mysql workbench aus den sourcen kompiliert + passende abhängigkeiten) auch nicht her ..., netbeans hat die code-completion nur geruckelt :P
__________________ robo47.net - Blog, Codeschnipsel und mehr | |
| | |
| | |
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 34.247
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Hab mir heute endlich mal die Zeit genommen, die 6.8 halbwegs ordentlich einzurichten. Schiebe das schon mehrere minor-Versionen vor mir her. Leider konnte 6.5 noch keine Config-Exporte.
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- |
| | |
| | ||
| Moderator Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
![]()
__________________ robo47.net - Blog, Codeschnipsel und mehr | | |
| | |
| | |
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 34.247
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | [OT] Ja. Natürlich noch kein Vergleich zu Eclipse (jedenfalls in meiner Erinnerung). Sorry fürs Thread-Kapern.
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- |
| | |
| | ||||
| Erfahrener Benutzer Registriert seit: 10.10.2009
Beiträge: 2.201
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() | Find ich gut. Die Antwort war sehr ausführlich und detailliert und hat mir extrem weiter geholfen. Zitat:
Und selbst wenn ich damit nicht fertig werde bleibt der Lerneffekt. Z.B. deine gesammelten Links werden mir denke ich weiterhelfen. Es ist halt schwierig in Bereichen mit denen man sich zwar schon beschäftigt und gearbeitet hat ohne Eigeninitiative weiter zu kommen wo ich persönlich finde das selber ein bisschen basteln mehr bringt als nur 100000 Artikel zu lesen (vom Verständniss der Problematiken her). Selber amchen hat mir im Prinzip meist mehr geholfen als nur etwas zu lesen.... Zitat:
Zitat:
Ich bedanke mich jedenfalls schonmal recht herzlich. Wenn jemand noch Dinge hinzuzufügen hat möge er es bitte tun. Ich bin für alles offen.
__________________ Möglicherweise kommt zu "Menschen lügen" auch "Menschen bauen Mist". | |||
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] Konzept für einen PHP Web Crawler | Dark Guardian | Software-Design | 10 | 23.11.2009 16:31 |
| MVC Konzept | Babbsdrebbler | Software-Design | 6 | 30.10.2009 08:13 |
| Konzept für Bowsergame | Wiillli | Beitragsarchiv | 1 | 21.10.2009 15:18 |
| Grafiker gesucht - BG mit fertigem Konzept und Programmierern | thezug | Beitragsarchiv | 0 | 28.08.2009 15:33 |
| [Erledigt] Konzept Newssammler | larsemann | PHP-Fortgeschrittene | 8 | 03.03.2009 17:20 |
| Objekte und Sessions | boehseronkel | PHP Tipps 2008 | 17 | 07.10.2008 10:34 |
| kleines DB Konzept | Tomte | Datenbanken | 21 | 23.08.2008 10:22 |
| dynamische Webseiten - Sitemap: Konzept | dh1sbg | PHP-Fortgeschrittene | 4 | 14.08.2007 13:23 |
| Möchtegern Browsergame | Marian | Trash | 57 | 06.08.2006 03:32 |
| Konzept Frage (2), DB Package | greg | PHP-Fortgeschrittene | 0 | 15.07.2006 14:19 |
| Überdenken des Konzept: Eigene Bildergalerien für User | pixelcut | PHP-Fortgeschrittene | 3 | 16.01.2006 18:40 |
| Konzept GFX-Community | PHP Tipps 2005-2 | 2 | 22.08.2005 10:22 | |
| [Erledigt] Selectanfrage an eine Datenbank,aber aus mehreren Tabellen | Datenbanken | 2 | 26.10.2004 07:23 | |
| [Erledigt] Probleme beim Umsetzen von alten Konzept in Smarty | PHP-Fortgeschrittene | 4 | 13.09.2004 01:43 | |
| [Erledigt] Multigaming Warscript Konzept | PHP-Fortgeschrittene | 6 | 30.08.2004 20:56 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| datenbankabstraktion, konzept datenbank, konzept für datenbank, konzeption einer datenbank, datenbank konzeption, konzeption datenbank, datenbank konzept, konzept einer datenbank, http://www.php.de/software-design/63161-konzept-einer-datenbankabstraktion.html, abstraktion datenbank, idatabaseconnection methoden, datenbank abstraktion, datenbanken konzept, datenbankaufbau delphi, php datenbank adapter, abstraktion oop php, idatabaseconnection, unterschied datentypen abstrakte, php konzeption tipps, konzeption von datenbanken |