Gibt es ein formales Anti-Muster, um das Szenario zu beschreiben?


10

Ein Teil des Codes wurde geschrieben, um Excel-Tabellen (Office Interop) zu generieren.

  • Der Code arbeitet sehr schlecht.
    • Ein Subsystem dient zum Generieren der Dateien bei Nacht. Leistung ist nachts kein Problem.
      • Es wird eine Funktion erstellt, um die richtige Datei aus den 100 verschiedenen verfügbaren Dateien auszuwählen, abhängig von einem ausgewählten Parametersatz.
      • Da physische Dateien vorhanden sind, wird ein Archivierungssystem hinzugefügt, um diese Dateien zu sichern (es gibt keinen Grund zum Archivieren. Diese Dateien sollten im laufenden Betrieb generiert werden).
      • Dieses System enthält keine Konfigurationsdatei, sondern eine fest codierte "Serverauswahl" -Funktion, die sich einfach auf den Server auswirkt, auf dem der Code ausgeführt wird.
      • Eine geplante Aufgabe ist erforderlich, um diesen Dienst zu unterstützen und auszuführen.

Dies läuft auf ein einziges Problem hinaus. Der ursprüngliche Code ist viel zu schlecht, um in einer Produktionsumgebung ausgeführt zu werden.

Wäre das Leistungsproblem behoben worden, müssten das Subsystem und das nachfolgende Archivierungssystem, die "File Picker Factory-Funktion", der fest codierte Fehlerpunkt und die Wartung der geplanten Aufgabe und des hinzugefügten Fehlerpunkts nicht vorhanden sein.

Dies ist ein "Kaskadenfehler", wenn Sie so wollen. Das ursprüngliche Problem führte zu mehr schlechtem Code, mehr schlechten Lösungen und unnötigem Overhead. Gibt es ein formales Anti-Muster oder einen allgemeinen Begriff, um es zu beschreiben?


1
Code, der nicht skalierbar ist? Wenn Ihr Hosting-Anbieter in einem Monat sein Geschäft einstellen würde und Sie die Produktionsumgebung auf neue Server migrieren müssten, wäre dies eine Softwareversion und eine allgemeine Notfallpanik erforderlich? Ich denke, Sie kennen die Antwort ...
maple_shaft

1
Wow, das klingt nach einer Berichtsgenerator-App, die ich vor ungefähr 12 Jahren geschrieben habe. Nun, bis auf das Fehlen einer Konfiguration und einer harten Codierung. Die Archivierung könnte eine rechtliche Anforderung sein, wie sie für mich war, nutzlos, aber trotzdem erforderlich. Die Leistung war anfangs schlecht, aber durch die Erstellung einer ordnungsgemäß optimierten separaten Berichts-DB wurde diese behoben. Das Ausführen von Berichten über eine hochtransaktionale Datenbank ist der Beginn vieler schlechter Ideen.
jfrankcarr

Antworten:


23

Lavastrom?

Im Fachjargon der Computerprogrammierung ist der Lavastrom ein Problem, bei dem unter suboptimalen Bedingungen geschriebener Computercode in die Produktion gebracht und hinzugefügt wird, während er sich noch in einem Entwicklungszustand befindet.

Aus dem Perl Design Wiki: Lava Flow lautet: "Wenn Code ... ausspuckt und dauerhaft wird, wird er zu einem architektonischen Merkmal der archäologischen Vielfalt. Die Dinge werden ohne Frage und ohne Hoffnung auf eine Veränderung dessen, was sich unter ihnen befindet, auf die Struktur gebaut." vorhandener Code wird als historische Kuriosität angesehen. "

Wenn das System in Produktion geht, muss häufig die Abwärtskompatibilität (da jetzt viele zusätzliche Komponenten davon abhängen) mit dem ursprünglichen, unvollständigen Design aufrechterhalten werden.

Lavaströme werden häufig durch Änderungen im Entwicklungsteam, das an einem Projekt arbeitet, verschärft. Wenn Mitarbeiter in das Projekt ein- und aussteigen, kann das Wissen über den Zweck von Aspekten des Systems verloren gehen, und anstatt diese Teile zu bereinigen, werden sie umgangen, was die Komplexität und das Durcheinander des Systems erhöht.

Der Lavastrom wird als Anti-Muster angesehen, ein häufig auftretendes Phänomen, das zu einem schlechten Design führt.


3
Ich habe das schon einmal gesehen (ok ok ich sehe es fast jeden Tag), aber ich habe den Namen nie neu geschrieben.
Kevin

3
Vielen Dank. Ich hatte noch nie gehört, dass es so heißt. Normalerweise bezeichne ich das Muster als Winchester Mystery House.
jfrankcarr

@jfrankcarr: Ich mag deinen Namen besser. sehr schlau.
Kevin

Ich glaube nicht, dass dies der Lavastrom wirklich bedeutet. Die Idee ist, dass Code, der nicht mehr verwendet wird, wie Lava über der Landschaft des realen Codes erstarrt ist. Falls der Code noch verwendet wird, wäre es wahrscheinlich besser gewesen, ihn zuerst anders zu machen.
Psr

@psr - Der Abschnitt "", in dem Code ... ausspuckt und dauerhaft wird, wird zu einem architektonischen Merkmal der archäologischen Vielfalt. Die Dinge werden ohne Frage und ohne Hoffnung auf eine Veränderung dessen, was sich unter ihnen befindet, auf die Struktur gebaut. Der vorhandene Code wird als historische Kuriosität angesehen. "
Stimmt

3

Ich bin mir nicht sicher, ob dies ein Anti-Muster ist. Wie bei allen Anti-Mustern müssen wir Ihr Wort nehmen, dass jeder, der es für eine gute Idee hielt, sich geirrt hat, aber in diesem Fall klingt das plausibel und ich werde Ihr Wort dafür nehmen, also ist das nicht das Problem.

Das Problem ist, dass ein Anti-Muster, um nützlich zu sein, eine Art allgemeine Falle beschreiben muss und wie sie vermieden werden kann. In diesem Fall würde dies wahrscheinlich eine Problemumgehung für Code finden, der eine schlechte Leistung erbringt, wenn Sie ihn einfach hätten verbessern können.

Das Problem damit als Anti-Muster, IMHO, ist, dass es unwahrscheinlich ist, dass es von großem Wert ist, darüber Bescheid zu wissen. Wer dies getan hat, hat vermutlich bereits verstanden, dass es schön wäre zu wissen, wie man es besser macht, also müssen sie nicht gewusst haben, wie es geht. Von der allgemeinen Situation als Anti-Muster gehört zu haben, hätte also nicht wirklich geholfen.

Soweit ein allgemeiner Begriff es beschreibt, funktioniert "Cascading Failure", wie Sie vorgeschlagen haben, ziemlich gut. Der Begriff, den ich für unqualifizierte Menschen mag, die auf einer Mission sind, die überhaupt keinen Sinn ergab, ist Snark-Jagd , aber das scheint für diese Situation zu hart zu sein. (Aber ich werde den Link trotzdem etwas unentgeltlich einwerfen, da es die beste Darstellung eines zum Scheitern verurteilten Unternehmens ist, das ich kenne).


+1 Viele gute Punkte. Da könntest du recht haben. Ich habe den Vorgang an dieser Stelle mehrmals wiederholt gesehen. Das ist meine Motivation, es als Anti-Muster zu beschreiben. Anstatt dieses spezielle Problem zu beheben.
P.Brian.Mackey

3

Ich bin mir nicht sicher, ob dies hilft, aber die Büroautomatisierung ist oft ein Sonderfall:

Die Office-Automatisierung erfolgt normalerweise auf diese Weise, wenn sie von einem Benutzer-Desktop aus automatisiert werden muss (insbesondere für .net-Websites, da die Office-Automatisierungsdokumente Sie korrekt warnen, dass die Office-Interop-Tools fehlerhaft sind, wenn sie kopflos ausgeführt werden Wir mussten kopflose Prozesse schreiben, um mit diesem Toolkit Office-Dokumente zu erstellen. Wir nannten die Opferdienste, weil Sie sie regelmäßig ermorden mussten, um die Erinnerung wiederherzustellen.

Abgesehen von der Archivierung ist das, was Sie beschreiben, in einigen Fällen leider eine bewährte Methode.

Link: http://support.microsoft.com/kb/257757


+1 - Das ist ein interessanter Kommentar. Ich werde das im Hinterkopf behalten. Der Service muss dann bleiben. Obwohl die Leistung schrecklich ist. 1 Minute, um eine Tabelle mit 5 Spalten und weniger als 100 Zeilen zu erstellen. Theres 100 Tabellenkalkulationen ...
P.Brian.Mackey
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.