Ich entwickle derzeit eine Webanwendung für die staatliche Landplanung. Die Anwendung wird hauptsächlich im Browser ausgeführt und verwendet Ajax zum Laden und Speichern von Daten.
Ich werde die erste Entwicklung machen und dann meinen Abschluss machen (es ist ein Studentenjob). Danach wird der Rest des Teams das gelegentliche Feature nach Bedarf hinzufügen. Sie wissen, wie man programmiert, aber sie sind meistens Landplanungsexperten.
Wie kann ich in Anbetracht der Geschwindigkeit, mit der sich die Javascript-Technologien ändern, Code schreiben, der in 20 Jahren noch funktioniert? Welche Bibliotheken, Technologien und Entwurfsideen sollte ich verwenden (oder vermeiden), um meinen Code zukunftssicher zu machen?
Antworten:
Planungssoftware für eine solche Lebensdauer ist schwierig, weil wir nicht wissen, was die Zukunft bringt. Ein bisschen Kontext: Java wurde vor 1995, 21 Jahren veröffentlicht. XmlHttpRequest wurde vor 17 Jahren als proprietäre Erweiterung für Internet Explorer 5 veröffentlicht. Es dauerte ungefähr 5 Jahre, bis es für alle gängigen Browser verfügbar wurde. Die 20 Jahre, in denen Sie nach vorne schauen möchten, sind fast die Zeit, in der es überhaupt umfangreiche Webanwendungen gibt.
Einige Dinge sind seitdem sicherlich gleich geblieben. Es wurden große Anstrengungen zur Standardisierung unternommen, und die meisten Browser entsprechen den verschiedenen Standards. Eine Website, die vor 15 Jahren browserübergreifend funktioniert hat, funktioniert immer noch genauso, vorausgesetzt, sie hat auf die gemeinsame Untergruppe aller Browser abgestellt und nicht auf Problemumgehungen für jeden Browser.
Andere Dinge kamen und gingen - vor allem Flash. Flash hatte eine Vielzahl von Problemen, die zu seinem Untergang führten. Vor allem wurde es von einer einzigen Firma kontrolliert. Anstelle eines Wettbewerbs innerhalb der Flash-Plattform gab es einen Wettbewerb zwischen Flash und HTML5 - und HTML5 gewann.
Aus dieser Geschichte können wir einige Hinweise gewinnen:
Machen Sie es sich einfach: Machen Sie das, was gerade funktioniert, ohne Abhilfemaßnahmen. Dieses Verhalten wird wahrscheinlich aus Gründen der Abwärtskompatibilität noch lange verfügbar sein.
Vermeiden Sie es, sich auf proprietäre Technologien zu verlassen, und bevorzugen Sie offene Standards.
Die heutige JavaScript-Welt ist relativ volatil mit einer großen Anzahl von Bibliotheken und Frameworks. In 20 Jahren wird jedoch fast keiner von ihnen von Bedeutung sein - das einzige „Framework“, von dem ich mir sicher bin, dass es bis dahin noch verwendet wird, ist Vanilla JS .
Wenn Sie eine Bibliothek oder ein Tool verwenden möchten, weil dies die Entwicklung erheblich vereinfacht, stellen Sie zunächst sicher, dass es auf den heute gut unterstützten Standards basiert. Anschließend müssen Sie die Bibliothek oder das Tool herunterladen und in Ihren Quellcode aufnehmen. Ihr Code-Repository sollte alles enthalten, was benötigt wird, um das System lauffähig zu machen. Alles Externe ist eine Abhängigkeit, die in Zukunft brechen könnte. Eine interessante Möglichkeit, dies zu testen, besteht darin, Ihren Code auf ein USB-Stick zu kopieren, auf einen neuen Computer mit einem anderen Betriebssystem zu wechseln, die Verbindung zum Internet zu trennen und zu prüfen, ob Sie Ihr Frontend zum Laufen bringen können. Solange Ihr Projekt aus einfachem HTML + CSS + JavaScript und möglicherweise einigen Bibliotheken besteht, werden Sie wahrscheinlich bestehen.
quelle
Noch wichtiger als das 20-jährige Überleben Ihres Codes ist das 20-jährige Überleben Ihrer Daten . Wahrscheinlich ist es das, was es wert ist, bewahrt zu werden. Wenn es einfach ist, mit Ihren Daten zu arbeiten, ist es einfach, ein alternatives System mit neuerer Technologie darauf aufzubauen.
Sobald Sie das haben, ist die Zukunftssicherung der App selbst einfacher, da sie das Datenmodell umgibt und ersetzt werden kann, wenn beispielsweise in 10 Jahren niemand mehr Javascript verwendet und Sie die App nach migrieren müssen WASM oder so. Die Modularität und Unabhängigkeit der Komponenten erleichtert die zukünftige Wartung.
[1] Die meisten Kommentare zu dieser Antwort sprechen sich entschieden gegen die Verwendung von Oracle für eine Datenbank aus und führen eine Reihe absolut legitimer Gründe an, warum es schwierig ist, mit Oracle zu arbeiten, die Lernkurve steil ist und der Installationsaufwand hoch ist. Dies sind durchaus berechtigte Bedenken bei der Auswahl von Oracle als Datenbank. In unserem Fall suchen wir jedoch nicht nach einer Universal-Datenbank, sondern nach einer Datenbank, bei der das Hauptaugenmerk auf der Wartbarkeit liegt . Oracle gibt es seit den späten 70ern und wird wahrscheinlich noch viele Jahre unterstützt. Es gibt ein riesiges Ökosystem von Beratern und Support-Optionen, die Ihnen dabei helfen, es am Laufen zu halten. Ist das ein überteuertes Durcheinander für viele Unternehmen? Sicher. Aber bleibt Ihre Datenbank 20 Jahre lang in Betrieb ? Ziemlich wahrscheinlich.
quelle
Die vorherige Antwort von amon ist großartig, aber es gibt zwei zusätzliche Punkte, die nicht erwähnt wurden:
Es geht nicht nur um Browser; Geräte sind auch wichtig.
amon erwähnt die Tatsache, dass eine „Website, die vor 15 Jahren browserübergreifend funktioniert hat, immer noch dieselbe Funktion hat“ , was zutrifft. Schauen Sie sich jedoch die Websites an, die vor nicht fünfzehn, sondern zehn Jahren erstellt wurden und bei den meisten Benutzern in den meisten Browsern funktionierten. Heutzutage kann ein großer Teil der Benutzer diese Websites überhaupt nicht mehr verwenden, nicht weil sich die Browser geändert haben, sondern weil sich die Geräte geändert haben. Diese Websites würden auf kleinen Bildschirmen mobiler Geräte furchtbar aussehen und letztendlich überhaupt nicht funktionieren, wenn Entwickler sich für JavaScript-
click
Ereignisse entscheiden, ohne zu wissen, dass diesestap
Ereignis ebenfalls wichtig ist.Sie konzentrieren sich auf ein falsches Thema.
Technologische Veränderungen sind eine Sache, aber eine wichtigere ist die Veränderung der Anforderungen . Möglicherweise muss das Produkt skaliert werden oder es müssen zusätzliche Funktionen bereitgestellt oder die aktuellen Funktionen müssen geändert werden.
Es ist egal, was mit Browsern, Geräten, W3C oder was auch immer passiert.
Wenn Sie Ihren Code so schreiben, dass er überarbeitet werden kann , entwickelt sich das Produkt mit der Technologie weiter.
Wenn Sie Ihren Code so schreiben, dass niemand ihn verstehen und pflegen kann, spielt die Technologie keine Rolle: Jede Änderung der Umgebung kann Ihre Anwendung ohnehin zum Erliegen bringen, z. B. eine Migration auf ein anderes Betriebssystem oder einfach nur natürliches Datenwachstum .
Als Beispiel arbeite ich seit zehn Jahren in der Softwareentwicklung. Unter den Dutzenden von Projekten gab es nur zwei, für die ich mich aus technologischen Gründen entschieden habe , genauer gesagt, weil sich PHP in den letzten zehn Jahren stark weiterentwickelt hat. Es war nicht einmal die Entscheidung des Kunden: Es würde ihn nicht weniger interessieren, ob die Site die Namespaces oder Closures von PHP verwendet. Es gab jedoch viele Änderungen in Bezug auf neue Anforderungen und Skalierbarkeit!
quelle
Sie planen nicht, 20 Jahre zu dauern. Schlicht und einfach. Stattdessen verlagern Sie Ihre Ziele auf die Unterteilung.
Ist Ihre App-Datenbank agnostisch? Wenn Sie jetzt die Datenbank wechseln müssten, könnten Sie. Ist Ihre Logiksprache agnostisch? Wenn Sie die App jetzt in einer völlig neuen Sprache schreiben müssten, könnten Sie das? Befolgen Sie gute Designrichtlinien wie SRP und DRY?
Ich habe Projekte länger als 20 Jahre laufen lassen, und ich kann Ihnen sagen, dass sich die Dinge ändern. Wie Popups. Vor 20 Jahren konnte man sich auf ein Pop-up verlassen, heute geht das nicht mehr. Vor 20 Jahren war XSS noch keine Sache, jetzt müssen Sie CORS berücksichtigen.
Stellen Sie also sicher, dass Ihre Logik gut getrennt ist und dass Sie keine Technologie verwenden, die Sie an einen bestimmten Anbieter bindet.
Dies kann manchmal sehr schwierig sein. .NET eignet sich beispielsweise hervorragend, um Logik und Methode für seinen MSSQL-Datenbankadapter bereitzustellen, für den es keine Entsprechungen in anderen Adaptern gibt. MSSQL scheint heute ein guter Plan zu sein, aber wird es dies auch für 20 Jahre bleiben? Wer weiß. Ein Beispiel dafür, wie Sie dies umgehen können, um eine Datenschicht zu erhalten, die von den anderen Teilen der Anwendung völlig getrennt ist. Im schlimmsten Fall müssen Sie dann nur die gesamte Datenschicht neu schreiben, der Rest Ihrer Anwendung bleibt davon unberührt.
Mit anderen Worten: Stellen Sie es sich wie ein Auto vor. Ihr Auto schafft es nicht 20 Jahre. Aber mit neuen Reifen, neuem Motor, neuem Getriebe, neuen Fenstern, neuer Elektronik usw. kann dasselbe Auto sehr lange unterwegs sein.
quelle
Die Antworten von @amon und einigen anderen sind großartig, aber ich wollte vorschlagen, dass Sie dies aus einer anderen Perspektive betrachten.
Ich habe mit großen Herstellern und Regierungsbehörden zusammengearbeitet, die sich auf Programme oder Codebasen stützten, die seit mehr als 20 Jahren verwendet wurden, und alle hatten eines gemeinsam: Das Unternehmen kontrollierte die Hardware. Etwas zu haben, das über 20 Jahre läuft und erweiterbar ist, ist nicht schwierig, wenn Sie kontrollieren, worauf es läuft. Die Mitarbeiter dieser Gruppen entwickelten Code auf modernen Computern, die hunderte Male schneller waren als die Bereitstellungscomputer ... aber die Bereitstellungscomputer waren in der Zeit eingefroren.
Ihre Situation ist kompliziert, da Sie für eine Website zwei Umgebungen planen müssen - den Server und den Browser.
Wenn es um den Server geht, haben Sie zwei allgemeine Möglichkeiten:
Verlassen Sie sich auf das Betriebssystem, um verschiedene Supportfunktionen zu erhalten, die möglicherweise viel schneller sind, aber möglicherweise ein "Einfrieren der Zeit" des Betriebssystems erfordern. In diesem Fall sollten Sie einige Sicherungen der Betriebssysteminstallation für den Server vorbereiten. Wenn in 10 Jahren etwas abstürzt, möchten Sie niemanden dazu bringen, das Betriebssystem neu zu installieren oder den Code neu zu schreiben, damit er in einer anderen Umgebung funktioniert.
Verwenden Sie versionierte Bibliotheken in einer bestimmten Sprache / einem bestimmten Framework, die langsamer sind, jedoch in einer virtuellen Umgebung gepackt werden können und wahrscheinlich auf verschiedenen Betriebssystemen oder Architekturen ausgeführt werden.
Wenn es um den Browser geht, müssen Sie alles auf dem Server hosten (dh Sie können kein globales CDN zum Hosten von Dateien verwenden). Wir können davon ausgehen, dass zukünftige Browser weiterhin HTML und Javascript ausführen (zumindest aus Kompatibilitätsgründen), aber das ist wirklich eine Vermutung und Sie können das nicht kontrollieren.
quelle
Der Kern der meisten Anwendungen sind die Daten. Daten sind für immer. Code ist mehr entbehrlich , veränderbar, formbar. Die Daten müssen jedoch erhalten bleiben. Konzentrieren Sie sich also darauf, ein wirklich solides Datenmodell zu erstellen. Halten Sie das Schema und die Daten sauber. Erwarten Sie, dass eine neue Anwendung möglicherweise auf derselben Datenbank erstellt wird.
Wählen Sie eine Datenbank aus, die Integritätsbeschränkungen erzwingen kann. Nicht erzwungene Einschränkungen können im Laufe der Zeit verletzt werden. Niemand merkt es. Maximale Nutzung von Funktionen wie Fremdschlüsseln, eindeutigen Einschränkungen, Prüfeinschränkungen und möglicherweise Auslösern für die Validierung. Es gibt einige Tricks, mit denen indizierte Sichten missbraucht werden können, um Einschränkungen hinsichtlich der tabellenübergreifenden Eindeutigkeit zu erzwingen.
Vielleicht müssen Sie akzeptieren, dass die Anwendung irgendwann neu geschrieben wird. Wenn die Datenbank sauber ist, wird es wenig Migrationsarbeit geben. Migrationen sind sehr arbeits- und mängelintensiv.
Aus technologischer Sicht ist es möglicherweise eine gute Idee, den größten Teil der Anwendung auf dem Server und nicht in JavaScript-Form auf dem Client zu speichern. Dank der Virtualisierung können Sie wahrscheinlich über einen extrem langen Zeitraum dieselbe Anwendung in derselben Betriebssysteminstanz ausführen . Das ist nicht wirklich schön, aber es ist eine Garantie, dass die App in 20 Jahren ohne teure Wartungs- und Hardwarekosten funktioniert. Wenn Sie dies tun, haben Sie zumindest den sicheren und billigen Fallback, alten, funktionierenden Code weiter auszuführen.
Außerdem finde ich, dass einige Technologie-Stacks stabiler sind als andere . Ich würde sagen, dass .NET derzeit die bestmögliche Abwärtskompatibilität bietet. Microsoft meint es absolut ernst. Java und C / C ++ sind ebenfalls sehr stabil. Python hat bewiesen, dass es mit den wichtigsten Änderungen in Python 3 sehr instabil ist. JavaScript scheint mir eigentlich ziemlich stabil zu sein, da das Brechen des Webs für keinen Browser-Anbieter eine Option ist. Sie sollten sich jedoch wahrscheinlich nicht auf etwas Experimentelles oder Irres verlassen. ("Funky" wird definiert als "Ich weiß es, wenn ich es sehe").
quelle
Die anderen Antworten sind sinnvoll. Ich bin jedoch der Meinung, dass die Kommentare zur Client-Technologie zu kompliziert sind. Ich arbeite seit 16 Jahren als Entwickler. Meiner Erfahrung nach sollte es Ihnen gut gehen, solange Sie Ihren Client-Code intuitiv halten. Also keine "Hacks" mit Frames / Iframes usw .. Benutze nur gut definierte Funktionen in den Browsern.
Sie können in Browsern immer Kompatibilitätsmodi verwenden, damit diese weiterhin funktionieren.
Um das zu beweisen, habe ich erst vor ein paar Monaten einen Jahrtausend-Fehler im Javascript-Code für einen Kunden behoben, der seine Web-App seit 17 Jahren ausführt. Funktioniert immer noch auf aktuellen Computern, aktuellen Datenbanken und aktuellen Betriebssystemen.
Fazit: Halten Sie es einfach und sauber und Sie sollten in Ordnung sein.
quelle
Einige Axiome:
Die stabilsten Technologien und Standards (die am wenigsten anfällig für Veralterung sind) sind in der Regel nicht proprietäre Technologien und Standards, die am weitesten verbreitet sind. Je breiter die Akzeptanz, desto größer ist die Trägheit gegen nahezu jede Form von Veränderung. Proprietäre "Standards" sind immer anfällig für das Glück und die Launen ihres Besitzers und der Konkurrenzkräfte.
Zwanzig Jahre sind eine sehr lange Zeit in der Computerindustrie. Fünf Jahre sind ein realistischeres Ziel. In fünf Jahren könnte das gesamte Problem, das Ihre Anwendung lösen soll, vollständig neu definiert werden.
Einige Beispiele zur Veranschaulichung:
C und C ++ gibt es schon lange. Sie haben Implementierungen auf nahezu jeder Plattform. C ++ entwickelt sich weiter, aber "universelle" Funktionen (die auf allen Plattformen verfügbar sind) werden garantiert nie veraltet sein.
Flash wurde fast ein universeller Standard, aber es ist proprietär. Unternehmensentscheidungen, es auf gängigen mobilen Plattformen nicht zu unterstützen, haben im Grunde genommen überall zum Scheitern verurteilt. Wenn Sie für das Web verfassen, möchten Sie, dass Ihre Inhalte auf allen Plattformen verfügbar sind. Sie möchten nicht den großen Markt verpassen, zu dem Mobile geworden ist.
WinTel (Windows / x86) ist zwar Eigentum von Microsoft und Intel, hat aber auf einer weniger als optimalen Plattform (16 Bit intern / 8 Bit extern 8088 gegenüber zeitgemäßem Apple Macintosh 32 Bit intern / 16 Bit extern 68000) und Erosion begonnen für Apple im Consumer-Markt bleibt eine De-facto-Wahl für Business-Plattformen. In all dieser Zeit (25 Jahre) hat die Verpflichtung zur Abwärtskompatibilität die zukünftige Entwicklung behindert und beträchtliche Zuversicht geweckt, dass das, was an der alten Box funktioniert hat, auch an der neuen funktioniert.
Abschließende Gedanken
JavaScript ist möglicherweise nicht die beste Wahl für die Implementierung von Geschäftslogik. Aus Gründen der Datenintegrität und -sicherheit sollte die Geschäftslogik auf dem Server ausgeführt werden. Daher sollte clientseitiges JavaScript auf das Verhalten der Benutzeroberfläche beschränkt sein. Selbst auf dem Server ist JavaScript möglicherweise nicht die beste Wahl. Bei kleinen Projekten ist es zwar einfacher zu arbeiten als bei anderen Stacks (Java oder C #), aber es fehlt die Formalität, die Ihnen hilft, besser organisierte Lösungen zu schreiben, wenn die Dinge komplexer werden.
quelle