Я унаследовал код в нашем проекте, который выглядит следующим образом. Это метод в классе.
protected override bool Load()
{
DataAccess.SomeEntity record;
try
{
record = _repository.Get(t => t.ID.Equals(ID));
if (record == null)
{
throw new InvalidOperationException("failed to initialize the object.");
}
else
{
this.ID = record.ID;
// this.OtherProperty = record.SomeProperty;
// etc
}
}
catch (Exception)
{
throw;
}
return true;
}
Если бы я затем вызвал этот метод Load из своего уровня пользовательского интерфейса, я бы, вероятно, захотел бы иметь блок try-catch для перехвата любого исключения, вызванного неудачей при загрузке экземпляра, например InvalidOperationException, но приведенный выше код кажется мне неправильным.
Не будет ли InvalidOperationException проглочен оператором catch? этот оператор catch также поймает потенциальные проблемы с _repository.Get, а также потенциальные проблемы с настройкой свойств, если запись верна.
Я подумал, что, возможно, мне следует реструктурировать его, добавив больше операторов try catch для обработки операций Get и операций по настройке свойств по отдельности, или добавив больше блоков catch, обрабатывающих различные исключения, но я спросил коллегу, и он предположил, что try catch не имеет значения в этом случае, и должен быть удален полностью, оставляя это как:
protected override bool Load()
{
DataAccess.SomeEntity record;
record = _repository.Get(t => t.ID.Equals(ID));
if (record == null)
{
throw new InvalidOperationException("failed to initialize the object.");
}
else
{
this.ID = record.ID;
// this.OtherProperty = record.SomeProperty;
// etc
}
return true;
}
Мне бы хотелось получить второе мнение, я только начал интересоваться обработкой исключений, поэтому я хотел бы убедиться, что я делаю это правильно в соответствии с лучшими практиками.