Предположим, у меня есть метод, который читает клиентов из файла CSV.
При чтении файла возникает исключение (например, IOException или FormatException). В большинстве случаев метод не может ничего сделать с ошибками, но он может добавить дополнительную информацию, такую как имя файла, номер строки и т. Д.
Класс метода получил зависимость IProgressAndErrorReporter, которая используется для регистрации / отображения ошибки.
Как мне сообщить вызывающему абоненту, что произошла ошибка, но что она уже устранена?
В настоящее время я делаю это так:
class CustomerReader
{
private readonly IProgressAndErrorReporter mProgressAndErrorReporter;
public bool TryReadCustomers() {
try {
...
return true;
}
catch (IOException err) {
mProgressAndErrorReporter.ReportError(err, "Can't read file {0} bla bla");
return false;
}
}
}
(я ловлю только «ожидаемые» исключения, т.е. не InvalidOperation и т. Д.)
Я отлично работаю, но в типе приложений обработки данных, которые я обычно работаю с уровнем выше, выглядит так:
public bool TryProcessData() {
if (!customerReader.TryReadCustomers())
return false;
var orders = webOrderReader.ReadNewOrders());
if (orders == null)
return false;
if (!orderCreator.TryCreateNewOrder(order))
...
}
Для меня это похоже на возвращение ко времени до исключений.
Должен ли я вместо этого выбросить какое-то "AlreadyHandledException" с пустым предложением catch на верхнем уровне?