Nur Crash-Software: Ссылка Zusammenfassung
Crash-Only-Programme stürzen sicher ab und erholen sich schnell. Es gibt nur einen Weg, um solche Software zu stoppen - indem Sie sie abstürzen - und nur eine Möglichkeit, sie aufzuzeigen - indem Sie die Wiederherstellung einleiten. Crash-only-Systeme werden aus reinen Crash-Komponenten erstellt, und transparente Revisionen auf Komponentenebene blenden systeminterne Komponentenabstürze von Endbenutzern aus. In diesem Papier wir befürworten ein Crash-Only-Design für Internet-Systeme, die zeigen, dass es zu mehr zuverlässigen, vorhersehbaren Code und schnellere, effektivere Wiederherstellung führen kann. Wir stellen Ideen vor, wie man solche Crash-Only-Internet-Dienste aufbauen kann, die erfolgreiche Techniken zu ihrem logischen Extrem bringen.
Es ist eher ein Anti-Pattern, aber ich habe gesehen, wie ich das "Keep it all an einem Ort" -Muster nenne. Es war eine große Anwendung, in der alle Variablen, die nicht lokal waren, für jede Klasse, JEDE Klasse, in einer einzigen Klasse namens P (für Parameter) gespeichert wurden. Nebenbei bemerkt wurden alle statischen Variablen in einer Klasse namens ... warten Sie auf ... S.
Wie auch immer, dieses Projekt wurde ziemlich groß und auf einmal funktionierte nichts. (Ich wurde um diese Zeit eingestellt). Erstaunlicherweise stürzte das Programm nicht ab, es hatte nur Tonnen von Nebenwirkungen, die die Anwendung verrückt machten. Wie Sie sich vorstellen können, sind mehrere Threads, die alle auf P zugreifen und Variablen verändern, ohne Sperren oder Synchronisation vorhanden.
Ich sage dir, es war wirklich ein Anblick zu sehen.
Das Unternehmen hat ein neues Büro eröffnet und drei Leute eingestellt, um es zu besetzen, ich bin einer von ihnen. Wir bekamen das Programm und sollten es reparieren. Wir verbrachten Tage damit, nur herumzusitzen und uns auf die Stirn zu schlagen. Ich habe jetzt einen durchdringenden Handabdruck auf meinem Gesicht.
Andere Funnies ... Variable namens "fudgeFactor". Ich weiß immer noch nicht, was das ist.
Methode, um nächsten ASCII-Charakter zu bekommen ...
%Vor%Wie auch immer, das ist mein lustiges Muster ... mit ein paar zusätzlichen Seiten, die lustig sind.
Im letzten Jahr habe ich Wartungsarbeiten an einer in LANSA geschriebenen Windows-Anwendung durchgeführt, bei der der Fokus verwaltet wird, indem alle Steuerelemente auf tabStop = false gesetzt werden, mit Ausnahme von zwei versteckten Schaltflächen (PrevFocus und NextFocus). Wenn ein Formular geladen wird, wird der Fokus auf ein Feld gesetzt, und der Name dieses Feldes wird in einer Tracking-Variablen (etwa "FocusField") gespeichert. Wenn der Benutzer den Fokus ändert, wird das GotFocus-Ereignis der entsprechenden Schaltfläche ausgeführt. Innerhalb dieser Funktion befindet sich eine case-Anweisung (wählen Sie die Option FocusField). Basierend auf dem aktuell fokussierten Feld wird die Validierungslogik ausgeführt und möglicherweise wechselt der Fokus zu einem anderen Feld.
Die GotFocus-Ereignisse für die meisten Steuerelemente betrachten den aktuellen Wert von FocusField und rufen dann eine LostFocus-Funktion auf, die dieselbe Fallanweisung für FocusField ausführt, damit das zuvor fokussierte Feld validiert wird.
Wie Sie sich denken können, ist es so unmöglich, die Benutzeroberfläche von der Logik zu trennen und eine unglaubliche Aufgabe zu erledigen. Das Umschreiben dieser Formulare mit einer einfachen Validate-Methode, die ALLE Eingaben validiert und die normalen Tab-Eigenschaften (TabOrder, TabStop, usw.) ihre Zauberkraft entfalten lässt, führte in der Regel zu einer Reduzierung des Codes um 50% und wesentlich zuverlässigere Formen.
>Ich habe keine Ahnung, woher dieses Muster stammt, obwohl es vielleicht von den RPG- / Green-Screen-Programmierern erfunden wurde, die WinForms-Entwickler geworden sind, die die Anwendung geschrieben haben.
Besucher haben mich zum ersten Mal bei der Arbeit an einem grafiklastigen Programm festgenagelt, als eine sehr elegante Möglichkeit, Operationen an komplexen Strukturen durchzuführen.
neben mvc (was nicht per se ein Muster ist), ist dies der "König der Muster" in Bezug auf seine Komplexität und sein Potenzial, Probleme zu lösen.
Das Fließende Interface von Fowler ist ein ziemlich interessantes Muster. Ich hatte immer eine Schwäche für abstrakte Fabriken, Strategien und das State Pattern.
Wenn ich darf, habe ich kürzlich ein "Muster" kodifiziert, das ich die Friend-Class-Muster , das für einige interessant oder nützlich sein könnte, um die Sichtbarkeit von privaten Feldzugängen in Sprachen zu beschränken, die keine C ++ - ähnlichen Friend-Klassen haben.
Nicht so sehr ein Muster, aber Abhängigkeitsinjektion und Inversion der Kontrolle
Ich erinnere mich, als ich zum ersten Mal von dem Fliegengewichtsmuster im GOF gelesen habe. Das Beispiel, das sie verwenden, ist ein Textverarbeitungsprogramm; Sie weisen auf die Nachteile hin, ein unabhängiges Objekt zur Darstellung jedes Zeichens zu verwenden. Das Fliegengewichtmuster fördert die Trennung von gemeinsam nutzbaren, intrinsischen, unveränderlichen Zuständen von einem nicht übertragbaren, extrinsischen, veränderlichen Zustand. Für mich war es zu dieser Zeit eines dieser "Aha!" Momente, die meinen Horizont wirklich erweitert haben und meine Designs bis heute beeinflusst haben.
Ein Freund von mir schlug vor, dass das Strategie-Muster im Wesentlichen das Vorläufermuster ist. Viele der anderen Muster (Bridge, Decorator, Proxy, State, ...) sind nur raffiniertere Anwendungen von Strategy. Ich erinnere mich, dass ich schon lange mit ihm gestritten habe, dass zwischen Strategie und Staat tatsächlich ein Unterschied besteht.
Das interessanteste Designmuster, das Sie jemals treffen werden, ist eines, das Sie aus offensichtlichen Gründen selbst erstellt haben.
Das soll nicht heißen, dass es das beste Designmuster ist, nur das Interessanteste.
Ich habe nie den Punkt des Besuchermusters gesehen, bis ich den Java-Bytecode direkt mit der ASM -Bibliothek bearbeiten musste. Es war erstaunlich, wie sehr das Muster vereinfachte, was sonst eine wirklich komplexe Aufgabe gewesen wäre.
Das Muster wird auch in den meisten Java-IDEs verwendet, wenn Sie Ihr eigenes Refactoring-Plugin schreiben möchten. Sie stellen ein Besucherobjekt bereit und es wird um den AST übergeben, um die erforderlichen Änderungen vorzunehmen.
Tags und Links design-patterns