Я изменяю какой-то устаревший код. У меня есть объект, который имеет метод, скажем, doSomething (). Этот метод вызывает исключение, когда конкретное утверждение не выполняется. Но в связи с новым требованием в определенных сценариях можно не генерировать исключение и продолжить работу с методом.
Теперь я не вызываю этот метод напрямую из того места, где мне нужно игнорировать исключение. Этот doSomething () похож на метод аудита, который вызывается внутренне из многих других методов, например, method1 (), method2 () и т. Д.
В месте, где мне нужно игнорировать исключение, я вызываю method1 (), теперь я не хочу, чтобы method1 () генерировал исключение. Поэтому я изменил method1 (), чтобы получить аргумент по умолчанию method1 (ignoreException = false), и вызвал method1 (true).
Я также изменил doSomething (), чтобы получить дополнительный аргумент, а method1 просто передает ignoreException обратно в doSomething (ignoreException).
Потенциально мне нужно изменить все методы, method2, method3 и т. Д., Чтобы получить этот дополнительный аргумент.
Увидев этот код, кто-то предложил, чтобы вместо передачи этого флага я мог использовать его как переменную-член класса, а затем вызывать установщик перед вызовом method1 (). Допустим, мой объект obj, тогда я должен сделать
obj.setIgnoreXXXException (истина);
obj.method1 ();
obj.setIgnoreXXXException (ложь);
Это кажется мне поддержанием некоторого глобального состояния и не кажется правильным. Но другой способ передачи аргументов также кажется неуклюжим, и мне приходится менять много мест (у этого класса есть подклассы, а некоторые методы являются виртуальными, поэтому мне нужно изменять везде)
Есть ли лучший способ сделать это. Так как он унаследован и нет модульных тестов, я не хочу изменять существующий код.