Как упростить класс с большим количеством скопированного кода обработки ошибок? - PullRequest
5 голосов
/ 09 февраля 2012

В каком-то старом Java-коде я обнаружил класс, который содержит множество методов, которые все используют один и тот же код обработки ошибок (try-catch с большим количеством обработки ошибок, ведением журнала и т. Д.). Похоже, что первый метод был просто скопирован, а затем код в блоке try был немного адаптирован. Вот как это выглядит в основном:

public class myClass{

    public void doSomething() {
        try {
           //do something
        } catch (Exception e) {
          //extensive error handling
        }
    }

    public void doSomethingElse() {
        try {
           //do something else
        } catch (Exception e) {
          //extensive error handling, copy-pasted from the above method
        }
    }

}

Как это можно упростить? Я не хочу менять интерфейс класса (сильно), я просто хотел бы избавиться от вставленных при копировании блоков catch, чтобы в исходном методе оставался только код из блока try.

Я думал об использовании шаблона Factory Method, где один метод реализует обработку ошибок и вызывает оригинальный метод в блоке try. Но тогда все вызовы должны проходить через этот метод.

Есть идеи?

Ответы [ 3 ]

8 голосов
/ 09 февраля 2012

Упростите его так же, как упростите весь другой повторяющийся код: поместите повторяющийся код в метод и вызовите метод:

public void doSomething() {
    try {
        //do something
    } catch (Exception e) {
        handleError(e);
    }
}

public void doSomethingElse() {
    try {
        //do something else
    } catch (Exception e) {
        handleError(e);
    }
}

private void handleError(Exception e) {
    //extensive error handling
}
1 голос
/ 09 февраля 2012

В Java, вероятно, лучшее, что вы получите, это просто извлечь содержимое блока catch в новый метод. Каждый метод все равно придется повторять:

try {

}
catch(Exception e) { handleError(e); }

Если вы хотите получить более краткие сведения, вам придется начать делать некоторые экзотические вещи (например, использовать макросы и запускать препроцессор над кодом).

Если бы вы использовали язык более высокого уровня, такой как Clojure или Ruby, у вас было бы больше возможностей, но Java в этом отношении довольно ограничен.

1 голос
/ 09 февраля 2012

Вы можете просто извлечь скопированный код в закрытом методе, взяв Exception аргумент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...