Java: wie geht man mit Wiederholungen ohne copy-paste-code?

Ich habe mehrere Fälle, in denen ich zu tun haben Wiederaufnahmeverfahren für DB-und Netzwerk-Operationen. Überall, wo ich es tun, ich habe die folgende code-Typ:

    for (int iteration = 1; ; iteration++) {
        try {
            data = doSomethingUseful(data);

            break;
        } catch (SomeException | AndAnotherException e) {
            if (iteration == helper.getNumberOfRetries()) {
                throw e;
            } else {
                errorReporter.reportError("Got following error for data = {}. Continue trying after delay...", data, e);
                utilities.defaultDelayForIteration(iteration);
                handleSpecificCase(data);
            }
        }
    }

Das Problem ist, dass diese code-Muster ist kopieren-einfügen in meinem ganzen Klassen. Das ist wirklich schlecht. Ich kann nicht herausfinden, wie, um loszuwerden, dieses für-Pause-catch-copy-paste-Muster, da ich in der Regel verschiedene Ausnahme zu behandeln, ich möchte die log-Daten, die ich nicht auf (in der Regel auch verschiedene Arten).

Ist es ein guter Weg, um dies zu vermeiden kopieren-einfügen in Java 7?

Edit: ich tun, verwenden Sie guice für dependency injection. Ich habe überprüft Ausnahmen. Es könnten mehrere Variablen anstatt nur eine die Daten und Sie sind alle unterschiedlichen Typs.

Edit2: AOP-Ansatz sieht sich als Erfolg versprechend für mich.

  • Warum sind die Ausnahmen, oft verschiedene, wenn dies alle DB-Zugriff-code? Können Sie ein paar Beispiele?
  • Ich habe gerade bearbeitet die Frage, aber die Argumentation ist, dass es DB und Vernetzung und ist auch nur für DB-je nach Betrieb wird es scheitern mit verschiedenen Ausnahme. Auch doSomethingUseful() könnte dir meine eigenen Ausnahmen, das will ich behandeln die gleiche Weise.
  • sind die Ausnahmen aktiviert oder deaktiviert?
  • Es sind checked und unchecked exceptions
  • es ist eine ähnliche Frage: stackoverflow.com/questions/13239972/... ich nahm die akzeptierte Antwort.
  • die akzeptierte Antwort ist, was ich versucht habe, zu vermeiden. Da funktioniert es perfekt wenn Sie nur es einmal, aber Sie produziert ein copy-paste Lösung, wenn Sie wiederholen in einer Menge von Orten. Danke für den link jedenfalls!

InformationsquelleAutor Artem | 2012-03-02
Schreibe einen Kommentar