[linux-l] Was mich an WebApplikationen immer und immerwiderAnkotzt...
Rocco Rutte
pdmef at gmx.net
Do Jul 31 15:35:42 CEST 2008
Hi,
* Steffen Dettmer wrote:
>* Rocco Rutte wrote on Thu, Jul 31, 2008 at 07:48 +0200:
>Ich hab leider im Thread verpasst, warum die Struktur nicht
>stabil ist (erweitern mit neuen Tabellen ist doch erlaubt,
>oder?).
Peter hatte vorgeschlagen für Applikationen mit DB-Storage die
DB-Struktur zu stabilisieren und darauf aufbauend zu abstrahieren und
Anwendungen drauf zu schreiben. Ich habe selbst nie wirklich
CMS-Software aktualisiert, weil mich schon die DB abschreckt sowas zu
benutzen. Durchschnittliche CMS-Software ist mir zu eigenständig.
>Meinen bescheidenen praktischen Erfahrungen nach lag sowas oft
>daran, dass sich indirekt in der Struktur Implementierungsdetails
>der Anwendung wiederspiegelten. Oft, weil über die direkten
>unmittelbaren Anwendungs-Anforderungen ein "Datenbankmodell"
>gemacht wurde: "Ohh, ich hab hier ein int an meinem Objekt, da
>mach ich mal ein INTEGER Feld in die Tabelle" (wobei das int Feld
>vielleicht schon im Objekt falsch ist). Überhaupt, so ein 1:1
>mapping ist vermutlich in der Regel falsch (aber es gibt genau
>dafür extra Libraries und Frameworks, die verkaufen einem das
>wohl als Feature?).
>Bei relationalen Datenbanken frage ich mich überhaupt oft, warum
>man oft so gern 1:1 auf Tabellen zugreifen möchte. Vielleicht,
>weil viele Entwickler C oder Java Programmierer sind und
>imperativ denken - und natürlich in 3GL statt 4GL.
Das glaube ich nicht, es denkt für 0815 niemand mehr in SQL, das ist
alles generiert... :)
Der Vorteil an ORM und 1:1 (oder fast 1:1) ist, dass man den DB Dialekt
abstrahieren und dann alles SQL automatisch aus den Metainformationen
der Objekte erzeugen kann (je nach Sprache geht das sogar aus der
Objekte-Definition selbst heraus, d.h. dass selbst Schreiben von
Mapping-Definitionen entfällt, und umgekehrt kann man aus der
DB-Struktur direkt Objekte erzeugen, die sich analog zur DB verhalten
was Constraints/Referenzen angeht).
Wenn man "irgendeine" Struktur hat, die nicht mehr nah genug an den
Objekten dran ist, wird das schwieriger bis nicht mehr machbar. Mit zig
Plugin-Schnittstellen, Modulen und optionalen Features will man sich
aber vermutlich nicht auch noch um die SQL-Dialekt-Abstraktion kümmern.
Bei selbst gebautem SQL müsste man bestimmte Versionen von bestimmten
Datenbanken freigeben, d.h. es müsste vorher getestet werden. Aber ich
bezweifle, dass sich die Logik hinter einer Web 2.0-Anwendung mit hoher
Abdeckung der Features automatisch durchtesten lässt.
...also nimmt man ORM. Das würde ich übrigens auch tun... :)
Bei Performance-kritischen Sachen fällt ORM eh aus.
>Ist es nicht eigentlich viel logischer, in Gedanken nur views zu
>haben (die sind ja dafür schliesslich da) und u.U. Stored
>Procedures (indirekt via views, z.B. als Trigger oder Regeln oder
>direkt in dem man sie aufruft)?
IHMO das gleiche Problem wie oben. Ist die Logik in (C,Java,Python,Foo)
Code, ist das eine definierte Umgebung. Für 0815 und Web 2.0 schreibt
niemand extra Stored Procedures für n Kominationen aus DB+Anwendung. Vor
allem weil sich Dialekte oft an sehr subtilen Stellen unterscheiden,
d.h. der gemeinsame Codeanteil ist sehr hoch. Das wäre wartungsmäßig
Horror für mich.
Views könnte bei read-only funktionieren, allerdings bezweifle ich, dass
viele DBs ein Rule-System ala Postgres haben, womit man ein INSERT auf
einen VIEW machen darf. Ansonsten müsste man das über Tabellen und
Trigger vermutlich simulieren, aber... dann lieber ORM.
MfG, Rocco
Mehr Informationen über die Mailingliste linux-l