Generischer Code, der keine Updates mehr benötigt

Begonnen von k00ni, 07. September 2008, 21:08:33

Vorheriges Thema - Nächstes Thema

k00ni

Hallo,
mir ist die letzten Tage eine Frage durch den Kopf gegangen, die ich noch nicht beantwortet habe: Kann man Code schreiben, den man einmal geschrieben, nicht mehr updaten muss? Oders anders: Kann man Code schreiben, so dass man alles modularisiert, per Schnittstellen kommunizieren lässt und bei einem Update nur die eine Seite einer Schnittstelle auswechselt?
Egal wo man ist, es gibt immer das leidige Problem, dass das Ändern von Funktionen oder Klassen, selbst erstellte Funktionen / Code / ... unbrauchbar machen, da man sie an den neuen Code anpassen muss.
Ein oft gesehener Ausweg ist, dass man sehr stark abstrahiert. Als Beispiel sei hier mal ein Datenbanklayer genannt.
Die Frage die sich nun stellt ist, geht es auch anders?
Man könnte einerseits die Idee mit den Schnittstellen (siehe oben) nehmen und als Grundgerüst für das System einsetzen. Es gibt in sich strikt abgetrennte Bereiche und man kann nur über die Schnittstellen raus oder woanders rein. Den Begriff könnte man hier mit Funktionen belegen.
Nur was sollen diese Bereiche sein? Man könnte den Datenbanklayer als einen nehmen. Nur was ist, wenn sich die Tabellenspalten ändern (bspw. der Name)? Dann müsste man die SQL-Kommandos anpassen. Abstrahiert man vorher so stark, dass man ggf. nur seine Daten übergibt, ohne auch nur eine Zeile SQL-Code zu schreiben, dann hat man ein Problem, wenn man nun (als Beispiel!) neben dem Namen auch noch einen eindeutigen Code braucht, dieser aber von einer anderen Tabelle kommt. Hier müsste man dann wieder den Code anpassen.
Andererseits frage ich mich gerade, ob man überhaupt den Weg einschlagen sollte, ein Gitter aufzubauen. Was ist, wenn man hier und da etwas anders machen möchte und ein paar Stäbe mittendrin entfernt? Das System sollte schon so \"flexibel\" sein, dass es nicht einengt und man selbst Teile austauschen kann.
Wie wäre es mit dem Wasser-Modell? Alles geht ineinander über. Sieht man es grob, so hat man für jede Aufgabe eine Datei mit PHP, HTML, SQL und CSS-Code. Optimiert für die Aufgabe, aber bei Änderungen schwierig zu ändern. Ich denke, dass es hier noch weitere Herangehensweisen gibt, die einen Gegensatz zu dem starren Schnittstellen(-Gitter-)Modell bilden.
Ist denn überhaupt immer sinnvoll die ganzen Sprachen zu trennen? Ich meine, es erleichtert die Zusammenarbeit zwischen Designern und Skriptern, wenn Datei A ein tpl-Datei ist und Datei B eine php-Datei. Nur könnte man das nicht auch verbinden?


Am Ende scheinen sich 2 Modelle heraus zu kristallisieren: Das Schnittstellen-Modell und das Wasserfluss-Modell.
Ersteres nutzt man ausgiebig, wenn man die objektorientierte oder funktionale Programmierung anwendet. Trennung und Kapselung von Funktionalität, um die Wiederverwendbarkeit dieser zu gewährleisten. Problem: Wenn sich die Schnittstellen ändern, muss darauf aufsetzender Code geändert werden. Ausweg: Man könnte vielleicht statt einer starren Schnittstelle wo Code A und B direkt aneinanderliegen, eine Zwischenschicht einführen. Diese wandelt, verändert und leitet weiter.
Zu letzterem fallen mir gerade keine Modelle oder Paradigmen ein. Die Frage wäre, ob man Code verschiedener Sprachen plumpt wieder zusammenschreibt.
 
Ich gehe mir erstmal etwas Kühles holen. Jemand auch was?

k00ni

Ich nochmal.
Habe hier gerade etwas auf dem Spiegel herumgekritzelt und mir noch ein paar Gedanken zu dem Wasserfluss-Modell gemacht. Und zwar ist mir folgendes aufgefallen: Eine Funktion ist ja eine Art Blackbox. Als Skripter hab ich da keinen Einfluss darauf, was darin passiert. Weiterhin kann ich zwar beliebig viel reingeben, aber man bekommt nur ein was heraus. Call-by-reference ginge hier auch noch, aber das stelle ich mir bei größeren Dingen etwas hässlich vor.
Alternativ könnte ich aber den Code einfach in eine Datei schreiben und diese an gewünschter Stelle einbinden. Der Vorteil wäre, dass man beliebig viel \"reinbringen\" und wieder \"herausbekommen\" kann. Das Skript kann also einfach und direkt Variablen verändern. Man hätte damit keine Räume, wo jede Tür eine Schnittstelle zwischen 2en darstellt, sondern eher einen Fluss. Man gibt eine Datei rein, welche gewisse Dinge verändert.
Das diese Idee mit vorherrschenden Paradigmen bricht ist mir klar. Die oben genannte Trennung sollte man aber hier im Wasserfluss-Modell wieder einbauen. Ich würde halt einfach statt der Vermischung verschiedener Sprachen einfach das direkte Einbinden von Code als Datei, statt einer Funktion in den Mittelpunkt rücken.
In wie weit kommt dieses Modell nun aber dem in der Überschrift angesprochenen updatefreien Code nahe? Nun ich denke, es wird erstmal nur eine andere Sichtweise des Skriptings sein, ohne direkt eine Antwort auf die Überschrift zu geben. Ist dieses Modell dafür hilfreich oder unnütz?

mahe

Mal ehrlich: ich hasse es wenn jemand etwas einfaches so umständlich beschreibt, sei froh dass du ned ein Arbeitskollege von mir bist :ugly:

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


Powie

Theoretisch: ja.
Praktisch: Vermutlich nicht zu kontrollieren das ganze.

k00ni

Praktisch: Vermutlich nicht zu kontrollieren das ganze.[/quote]
Was meinst du damit?

all your base are belong to us / Discord