Dies ist möglicherweise eine schlechte Idee. Erstens ist es sinnbildlich für die Maxime "Die Definition von Wahnsinn ist, dass man dieselbe Sache zweimal macht und jedes Mal andere Ergebnisse erwartet". Zweitens lässt sich dieses Kodierungsmuster nicht gut mit sich selbst vereinbaren. Ein Beispiel:
Nehmen wir an, die Hardware-Schicht Ihres Netzes sendet ein Paket bei einem Fehler dreimal erneut, wobei zwischen den Fehlern etwa eine Sekunde gewartet wird.
Nehmen wir nun an, die Softwareschicht sendet bei einem Paketfehler dreimal eine Benachrichtigung über einen Fehler zurück.
Nehmen wir nun an, dass die Benachrichtigungsschicht die Benachrichtigung dreimal reaktiviert, wenn die Zustellung einer Benachrichtigung fehlgeschlagen ist.
Nehmen wir nun an, die Fehlermeldeschicht reaktiviert die Meldeschicht dreimal bei einem Meldefehler.
Und nun nehmen wir an, der Webserver reaktiviert die Fehlermeldung dreimal bei Fehlern.
Und nun nehmen wir an, der Web-Client sendet die Anfrage dreimal erneut, wenn er einen Fehler vom Server erhält.
Nehmen wir nun an, die Leitung am Netzwerk-Switch, die die Benachrichtigung an den Administrator weiterleiten soll, ist nicht angeschlossen. Wann erhält der Benutzer des Webclients endlich seine Fehlermeldung? Ich rechne mit etwa zwölf Minuten später.
Damit Sie nicht denken, dass dies nur ein dummes Beispiel ist: Wir haben diesen Fehler in Kundencode gesehen, allerdings viel, viel schlimmer als ich hier beschrieben habe. In dem speziellen Kundencode betrug die Zeitspanne zwischen dem Auftreten des Fehlers und seiner Meldung an den Benutzer mehrere Wochen weil so viele Schichten automatisch einen neuen Versuch mit Wartezeiten unternahmen. Stellen Sie sich nur vor, was passieren würde, wenn es zehn Wiederholungen anstelle von drei .
Normalerweise ist es richtig, bei einer Fehlerbedingung Folgendes zu tun sofort melden und den Nutzer entscheiden lassen, was zu tun ist. Wenn der Benutzer eine Richtlinie für automatische Wiederholungsversuche erstellen möchte, kann er diese Richtlinie auf der entsprechenden Ebene der Softwareabstraktion erstellen.