В качестве общего принципа лучше всего позволить минимально возможному методу в стеке (особенно там, где он все еще имеет значение или что-то можно с ним сделать) поймать исключение. Это уменьшает избыточные и в противном случае ненужные блоки try ... catch и позволяет коду, который может соответствующим образом обработать исключение , фактически содержит логику для этого.
Обновление
Рассмотрим следующий довольно общий (и немного надуманный) пример:
public abstract class ThrowRandomIOExceptions
{
public void SafeIOOperation(string fileName, IModel model)
{
try
{
DoSomeIOOperation(fileName, model);
}
catch(FileNotFoundException ex)
{
// Handle the exception so the children don't have to.
}
}
public abstract void DoSomeIOOperation(string fileName, IModel model);
}
public class WriteCSV : ThrowRandomIOExceptions
{
public void DoSomeIOOperation(string fileName, IModel model)
{
// Write the model in comma delimited format
}
}
public class WriteTSV : ThrowRandomIOExceptions
{
public void DoSomeIOOperation(string fileName, IModel model)
{
// Write the model in tab delimited format
}
}
Обработка FileNotFoundException
в базовом классе избавляет детей от необходимости включать их собственный try ... catch и дает им гарантию, что исключения из неправильных имен файлов будут обрабатываться.