Как создать помощников исключений? - PullRequest
2 голосов
/ 09 июня 2009

Я смотрю на создание вспомогательного метода для установки сообщения об исключении, автоматическую настройку String.Format, добавление внутренних исключений, установку кодов завершения командной строки и т. Д .; что-то вроде:

public static void MyExceptionHelper(ExitCode code, string message) {}
public static void MyExceptionHelper(ExitCode code, Exception e) {}
public static void MyExceptionHelper(ExitCode code, Exception e, String message) {}
public static void MyExceptionHelper(ExitCode code, Exception e, String message, params object[] args) {}
// etc...

В BCL есть несколько статических классов, которые делают подобные вещи (например, System.ThrowHelper в mscorlib).
Где лучшее место, чтобы положить их? Как перегруженные конструкторы на исключении, в отдельном статическом классе (например, BCL), как статические методы на самом исключении или где-то еще?

Ответы [ 5 ]

2 голосов
/ 09 июня 2009

Я бы порекомендовал блок приложения Exception в EnterpriseLibrary , он имеет очень элегантный дизайн для работы с исключениями, и если вы не хотите, чтобы все EntLib рекомендовал копировать их интерфейс.

1 голос
/ 09 июня 2009

Для таких методов я предпочитаю перегруженные конструкторы. Вы явно используете его для создания нового объекта, и для этого нужен конструктор.

Когда вы попадаете в мир статических методов, не всегда понятно, где они должны заканчиваться. Вам нужно будет проанализировать, кто будет их использовать и как они будут использоваться, а затем изучить плюсы и минусы каждого потенциального местоположения. Тогда вы будете знать, где их поставить.

1 голос
/ 09 июня 2009

Я бы просто сделал эти конструкторы для вашего класса исключений.

0 голосов
/ 09 июня 2009

Похоже, у вас достаточно настраиваемого поведения, чтобы вывести собственный класс исключений и применить к нему такое поведение. В зависимости от того, хотите ли вы в дальнейшем взаимодействовать с базовым Исключением как обязательным условием Исключения, вы можете захотеть, чтобы в вашем производном классе были конструкторы be, которые устанавливают в качестве базового переданное исключение, и вносите изменения в это исключение из в вашем классе; полиморфизм позволит этому экземпляру быть преобразованным до базового исключения для взаимодействия оттуда.

0 голосов
/ 09 июня 2009

В большинстве случаев в BCL существуют помощники исключений, которые поддерживают локализацию (которая обычно заключена во внутренний класс SR, который можно найти почти во всех сборках .NET BCL.) Общая идея заключается в том, что вы используете вспомогательный метод для передачи некоторых основных данных для исключения, а вспомогательный обрабатывает поиск ресурсов и форматирование данных, чтобы вы создали исключение. Преимущество заключается в том, что вы централизуете код для исключений, которые могут быть выброшены из нескольких мест, но которые должны быть созданы одинаковым образом. Так что, в целом, та же идея, что и у любого другого служебного класса или унаследованного объекта ... способствует повторному использованию и поддержке.

Что касается того, где их разместить ... Мне нравится иметь "внутреннюю область" в каждой из моих сборок с помощником исключения, помощником ресурса и другими внутренними типами "поддержки сборки".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...