| | | | |
| |||||||
| 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: 11.05.2008
Beiträge: 6.069
![]() ![]() ![]() ![]() ![]() ![]() ![]() | Darf ich mal was einschieben? Dein Konzept ist, so wie ichs beim Ueberfliegen aufgefasst habe, konzeptlos Bei allem was du machst, abstrahier in Stufen. Kein Entwickler mag es, wenn das Absenden eines manuellen Queries zum Hoelleninferno wird, weil 10 Abstraktionsschichten glauben, sie wuessten was du eigentlich willst. Wenn du wirklich mehrere Datenbanken transparent ansprechen moechtest, versuch Queries als Objekte abzulegen. Zend_Db_Select hat sich da als sehr hilfreich erwiesen, wir nutzens fuer MySQL und Oracle (PDO jeweils). Solangs nicht sehr komplex wird, ist damit alles moeglich. Falls doch, hast du Adapter, die du entsprechend anpassen kannst. Also resete nochmal deine ganzen Plaene von DBTable usw. Ich halte das fuer Murgs. Spaetestens bei nem Join flitzt dir da ein unueberlegtes Konzept gegen die Wand. Synchronisieren wuerde ich komplett streichen. Was auch immer du damit bezwecken wolltest. |
| | |
| | |||
| Erfahrener Benutzer Registriert seit: 10.10.2009
Beiträge: 2.201
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() | Zitat:
Zitat:
Objekte zur Darstellung von Tabellen und Spalten habe ich aus 3 Gründen eingeführt: - In dem System wo mein OR-Mapper zum Einsatz kommen soll werden Erweiterungen während ihrer Installation in der Lage sein müssen die Datenbank um Tabellen/Spalten zu erweitern. Ich kann somit die Möglichkeit anbieten ohne großartiges Query gekaspert mit Funktionen wie addTable() o.Ä. zu arbeiten welche dann den benötigten Query erzeugt. - Aus oben genannten Grund kann ich andere Aufgaben wie Zählen von Datensätzen auch einfach über Memberfunktionen des entsprechendem Objektes realisieren. Erspart mir erneut für einige Routineaufgaben das manuelle Erzeugen eines DBQuery Objektes. - Würde ich Spalten und Tabellen nicht als Objekte abbilden laufe ich meiner Meinung nach in ein anderes Problem betreffend der WHERE Klausel der Queries. Würde ich folgendes amchen: PHP-Code: Folgendes wäre nicht möglich: PHP-Code: Selbiges gilt für die Tabellen und ihre Namen. Das Driver-Objekt setzt dann ledeglich die Objektstruktur welches das DBQuery Objekt enthält in einen SQL-Befehl um und setzt diesen ab. Mit Synchronisation war zuerst ein Plan das sich die Objekte permanent den Inhalt der Datenbank wiederspiegeln sollten. Das habe ich aber schon länger verworfen.
__________________ Möglicherweise kommt zu "Menschen lügen" auch "Menschen bauen Mist". | ||
| | |
| | |
| Moderator Registriert seit: 11.05.2008
Beiträge: 6.069
![]() ![]() ![]() ![]() ![]() ![]() ![]() | Du wirst damit scheitern. Die großen Frameworks haben sich da auch rausgehalten, weil du WHERE-Bedingungen einfach nicht sinnvoll und nicht so effektiv abbilden kannst. WHERE IN (1, 4, 1215) AND (status = 1 OR activated = 1) AND (SUBSTR(description, 0, 10) LIKE '%schnurz% OR logins > 5). Wie willst du das kürzer objektorientiert abbilden? Warum verkomplizieren? Nicht überall macht OOP Sinn. Außerdem, wie stellst du Formatierungen dar? Bedingungen in ORDER-Clauses. Such dir erstmal einen richtig komplizierten Query raus und schau, ob du den irgendwie in deine Objektstruktur reinbekommst, ohne dabei Codemonster zu erzeugen. Zend_Db_Select macht das sehr elegant, in dem das Objekt eine __toString() Methode implementiert, die dir den SELECT-Query eben per String zurückliefert. Die fetch-Methoden erwarten einen String. So kannst du das Objekt benutzen, oder eben deinen eigenen Query zusammenbauen. Ich wills dir aber nicht verderben oder ausreden, nur ich habe meine Versuche diesbezüglich schon hinter mir und glaube nicht, dass eine wirklich sinnvolle Lösung drinne ist. |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 10.10.2009
Beiträge: 2.201
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() | Zitat:
PHP-Code: Von kürzer abbilden ist auch im Prinzip keine Rede gewesen. Ich möchte es nur so abbilden das ich mit einem zugrundeliegenden Driver-Objekt das ganze für verschiedene DBMS "konvertieren" kann. Sicherlich werde ich auch eine Möglichkeit vorsehen Queries eigenständig einzugeben ohne die Objektstruktur nutzen zu müssen. Das Problem ist dann aber was passiert wenn es die Substr() Methode im verwendetem DBMS nicht gibt? In meinem Fall hätte das Driver-Objekt, wie auch immer, noch die Möglichkeit darauf zu reagieren und ggf. eine vom DBMS bereitgestellte äquivalente Funktion zu nutzen, die Angabe zu ignorieren oder einen Fehler zu werfen. Letzteres würde die Umsetzung aber in der Tat sinnlos machen da bei einem Handgeschriebenem Query wohl auch ein Fehler zustande käme. DBWhere sollte auch eher DBCondition heißen. Das trifft den Verwendungszweck erheblich besser und erklärt auch wie Bedingungen in Order By Klauseln zu realisieren wären. Bei derartigen Monsterqueries wäre es auch kein größeres Problem den "fertigen" Query als prepared Statement für jeden installierten Datenbankteiber zu speichern. Die PDO emuliert diese ja sogar für DBMS welche sie nicht unterstützen. Das gehört aber zu dem umliegendem System und nicht direkt zum OR-Mapper. Code: Ich wills dir aber nicht verderben oder ausreden, nur ich habe meine Versuche diesbezüglich schon hinter mir und glaube nicht, dass eine wirklich sinnvolle Lösung drinne ist.
__________________ Möglicherweise kommt zu "Menschen lügen" auch "Menschen bauen Mist". | |
| | |
| | ||
| Moderator Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
Aber wie ich früher schon gesagt hab, so ein System neu zu erfinden mit all dem was dieses System können soll, soweit ich den Thread mitgelesen hab, geht fast über das hinaus was andere Systeme in dem Bereich wie Doctrine, Propel, Zend_Db und co zusammen können. Es klingt einfach nach der eierlegenden Wollmilchsau und wenn sieht sich Doctrine, Propel oder ein anderes ORM-System angeschaut hat und sieht was Sie an Features bieten, von der CMD für sämtliche Generierung/Migration/etc über Tabellen-Generierungen, Migrationen, Fixtures und das alles, dann ist das toll. Aber man muss auf der anderen Seite dann sehen, wie lange wurde an so einem System entwickelt (Propel seit 2003, Doctrine 2006, Zend_Db 2005) ? Wie viele Leute arbeiten daran (und damit), seien es Entwickler, Benutzer die nur ab und zu mal nen Patch/Bugreport machen und wie sieht auf der anderen Seite dann auch die Performance, Speicherverbrauch und soweiter bei so einer eierlegenden Wollmilchsau aus ? Und kann man als Einzelperson überhaupt sowas vernünftig stemmen ? Und in welchem Zeitrahmen ? Meiner Meinung nach ist das kein 1-Personen System wenn man nicht gerade zu viel Zeit hat und damit leben kann wenn das System erst nach zig Monaten halbwegs die ganzen Anforderungen sauber abdeckt, etwas getestet wurde und vielleicht im ersten Projekt mal etwas evaluiert wurde um festzustellen welche eventuellen Ecken es hat die man noch ausbügeln sollte/müsste. Auch beim ZF hat man ja nachdem Benjamin Eberlei die Entwicklung von Zend_Entity abgebrochen hat, dann indirekt auf Doctrine gesetzt, weil er einfach festgestellt hat, es ist ein Haufen Arbeit und Doctrine hat das Rad schon recht rund erfunden und will es mit Doctrine 2 noch runder machen). Dafür wird es eine stärkere Integration von Doctrine 1 und 2 im ZF geben und Eberlei ist jetzt Core-Entwickler bei Doctrine und kümmert sich um die ZF-Integration. Bei Symfony hat man von anfang an gesagt sie wollen das Rad nicht neu erfinden und haben Propel und später noch Doctrine integriert.
__________________ robo47.net - Blog, Codeschnipsel und mehr | | |
| | |
| | ||
| Moderator Registriert seit: 11.05.2008
Beiträge: 6.069
![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
| |
| | |
| | |||
| Moderator Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | // hatte Dark Guardians antwort noch nicht gesehen ... tab zu lange offen ![]() daher gleich noch mehr ![]() Zitat:
Das ist ja ~ das was Doctrine mit DQL gemacht hat, eine sql-like-sprache die passend in querys umgesetzt wird und wo man natives SQL einbauen kann. Zitat:
__________________ robo47.net - Blog, Codeschnipsel und mehr | | ||
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 10.10.2009
Beiträge: 2.201
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() | Sagte ja ist ein Codemonster. An sowas habe ich auch nicht gedacht. Ich wollte nur zeigen das es "auf Krampf" abzubilden wäre. Zitat:
Eigentlich will ich gar nicht soooooooooo viel, sondern mir nur die Möglichkeit offenhalten es nachträglich implementieren zu können falls doch einmal der Fall eintritt das meine Implementierung nicht mehr ausreicht. Das geht halt leider nur wenn ich so viel in Einzelteile zerlege wie möglich und den einzelnen Teilen die Möglichkeit der Erweiterbarkeit hinzufüge. Mag sein das es dadurch gerade so rüberkommt als wolle ich Doctrine nachbauen. Ist aber definitiv nicht so. Dazu muss ich sagen ich bin ein Mensch der gerne an solchen Dingen etwas knabbert. Ein Rätsel macht auch keinen Spaß wenn die Lösung auf den Kopf gedruckt drunter steht und man sie lesen kann. Genauso macht mir die konzeptuionelle Entwicklung eines Systems keinen Spaß wenn ich für jede Problemstellung eine Lösung aus dem Netz nehmen könnte.
__________________ Möglicherweise kommt zu "Menschen lügen" auch "Menschen bauen Mist". | |
| | |
| | ||
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 34.246
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Zitat:
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- | |
| | |
|
| 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 |
| propel vs doctrine, datenbank abstraktion, doctrine proxy, datenbankabstraktion, datenbankabstrakion, datenbankastraktionsframework, php anwendung 3 tabellen konzept, php oop mysql mvc abstraktionsschicht, doctrine 2 mehrere join columns, \doctrine 2\ objekt befüllung, php oop mit datenbank, php konstruktor nur von factory aufrufbar, symfony doctrine \mehrere datenbanken\, datenbankabstraktion prinzip, \pdo where in\, smarty php proxy, doctrine speicherverbrauch, datenbank abstraktion symfony 2, doctrine table proxy problem, php klasse mit verschiedenen datenbanken |