Я обнаружил, что у меня много этого в разных методах в моем коде:
try
{
runABunchOfMethods();
}
catch (Exception ex)
{
logger.Log(ex);
}
А как насчет создания этого:
public static class Executor
{
private static ILogger logger;
public delegate void ExecuteThis();
static Executor()
{
// logger = ...GetLoggerFromIoC();
}
public static void Execute<T>(ExecuteThis executeThis)
where T : Exception
{
try
{
executeThis();
}
catch (T ex)
{
// Some kind of Exception Handling Strategy...
logger.Log(ex);
// throw;
}
}
}
И просто используя это так:
private void RunSomething()
{
Method1(someClassVar);
Method2(someOtherClassVar);
}
...
Executor.Execute<ApplicationException>(RunSomething);
Есть ли у такого подхода минусы? (Вы можете добавить Executor-методы и делегаты, когда хотите, наконец, и использовать дженерики для типа Exeception, который вы хотите поймать ...)
Изменить: извините за непонятность - то, что мне действительно нужно, было некоторым вкладом в общую идею попытки перенести выполнение кода из рассматриваемого класса в более общий класс, который делает это. Я только что сделал быстрый макет решения, но в реальной жизни вы, естественно, использовали бы такие вещи, как стратегии обработки исключений, абстрактные базовые классы выполнения с более специализированными классами выполнения для определенного уровня / части системы. Обычно я создаю один метод с частью try ... / runABunchOfMethods (это обработка исключений со специализированными исключениями), который вызывает runABunchOfMethods, который, в свою очередь, выполняет ограниченный набор других методов в стиле «чистого кода».
Я куплю аргумент обфускации на некоторых уровнях, но если все решение / архитектура будет придерживаться этого предложенного подхода, новый программист должен быть в состоянии понять шаблон.
Я отредактировал Executor, чтобы включить общий T, чтобы разрешить вызывающему коду указывать исключение, просто чтобы показать, как обрабатывать специализированное исключение. В других случаях у вас может быть куча уловок: es в зависимости от того, что вы хотите сделать, но это особые случаи в конкретных подклассах, о которых я говорил.