Mut zum Klumpen?
Manche Dinge sind nachhaltig beeindruckend für mich, das muß ich schon zugeben… Da hat man sich eine Weile mit theoretischen Aspekten von Softwareentwicklung und -architektur herumgeschlagen, hier und da auch (in Open-Source-Projekten und deren praktischem Einsatz) gesehen, daß diese Aspekte gut und richtig und sinnvoll sind… Und dann hat man es in verschiedenen Situationen mit, nun, “anderer” Software zu tun, mit Software, für die man auch als Unternehmen richtig gutes Geld los wird, und sitzt grübelnd davor, stellt sich gewisse… Fragen…
Die Rede nach dieser (zu langen?) Einleitung ist von dem, was gelegentlich gern als “Separation Of Concerns” bezeichnet wird, der Trennung von verschiedenen Aufgaben in einem Softwaresystem und Verteilung auf verschiedene, allgemein gesprochen, “Komponenten”, etwa die Aufteilung eines Gesamtsystems in die Schichten “Datenhaltung”, “Geschäftslogik” und “Präsentation”, oder die Aufteilung einer (web-basierten) Präsentationsschicht in die Elemente “Logik” (der ‘Code’, der den Inhalt einer dynamisch erzeugten HTML-Seite generiert), “Struktur” (Aufbau einer solchen Seite – XHTML, HTML, WML, …) und “Gestaltung” (CSS). Solche Trennungen sind schön, weil sich damit gewisse Dinge erheblich vereinfachen: Wenn ich in einem dreischichtigen System die Art und Weise ändern will, wie meine Daten in eine Datenbank oder wohin auch immer persistiert werden, schraube ich eben an der Datenhaltungsschicht. Will ich dem Nutzer eine hübschere Oberfläche geben, lege ich Hand an die Präsentationsschicht – immer (idealerweise) ohne die anderen Schichten in irgendeiner Form zu beeinflussen. Das reduziert den Aufwand und das Risiko häßlicher Fehler mit unerwarteten Konsequenzen. Gleiches für den Web-Fall: Will ich die Art, wie die Inhalte generiert werden, ändern, lege ich Hand an die Logik. Will ich die Struktur, in der diese ausgegeben werden, ändern, lege ich Hand an ein XHTML- oder was-auch-immer- Template. Will ich visuelle Aspekte ändern, inkludiere ich eine neue CSS-Datei – schön, effektiv, schnell. Im Open-Source – Umfeld gibt es viele sehr gut nutzbare Werkzeuge, die genau solche Ansätze unterstützen und enorm vereinfachen, etwa das Java-basierte Freemarker-Template-System. Damit geht viel, und spätestens nach dem dritten Umbau der Applikations-Oberfläche weiß man, warum man sich dort anfangs freiwillig eingearbeitet hat.
Und dann… dann kommt der Punkt, an dem man unter Umständen Anwendungen einkaufen muß, weil es etwa keine passende Open-Source – Lösung gibt und/oder die Features zu komplex / zu umfangreich / zu geschützt sind, um sie mit akzeptablem Aufwand selbst zu implementieren. Und dann wundert man sich plötzlich nicht mehr. Wenn in einem proprietären DMS aus den frühen 1990ern ein Web-Client integriert ist, der im Wesentlichen darin besteht, daß das Markup für die Oberfläche (eine der damaligen Zeit entsprechende Verschachtelung von Tabellen und Frames, ohne daß man sich die Mühe gemacht hätte, ‘id’ – oder ‘class’ – Attribute zu verwenden…) irgendwo hartverdrahtet in UI-Klassen wohnt und somit auch nicht wirklich anpaß-, erweiter-, formatierbar ist, kann man vielleicht gerade noch akzeptieren. Dann ist man an dem Punkt, an dem man mit CSS (soweit es eben geht…) auf der Struktur herumschlägt oder im schlimmsten Fall ein Filter davorbaut, das die Inhalte der HTTP-Response notdürftig aufpäppelt. Nicht schön, aber pragmatisch und offensichtlich der einzig gangbare Weg.
Nicht mehr verstehen hingegen kann man diesen Weg, wenn man eine JEE-Anwendung sieht, bei der dann exakt derselbe Ansatz in aller Ausführlichkeit praktiziert wird: Obwohl für Java (wie angedeutet) jede Menge wunderbare Templating-Systeme existieren, mit denen man so vieles so schön einfach machen könnte, wird absolut alles, was die Anwendung in einem State zurückgibt (und wenn ich ‘alles’ schreibe, meine ich alles – XHTML, einschließlich eventueller Inline-Stylesheets und sogar zugehöriger JS-Elemente…) in die doGet(...)
-Methode eines Servlets gestopft und bei Aufruf von dort in Richtung Browser geschickt. Wartbarkeit? Konfigurierbarkeit? Sinn des ganzen Unterfangen? Nichts davon sehe ich in diesem Fall… und dann beginnt wieder das “Basteln”. Schöne neue Software-Welt…