Создание классов исключений для разных кодов ошибок - PullRequest
3 голосов
/ 18 февраля 2010

Я пишу пользовательский .Net SDK для картографической программы MapInfo Pro, mapinfo предоставляет только два метода для использования через COM void Do(string cmd) и string Eval(string cmd). Когда вы используете один из этих методов и делаете что-то вторженное, он возвращает COMException с сообщением об ошибке, и я получаю код ошибки из MapInfo. Так, например, сообщение об ошибке выглядит так:

 418  "Table not found."

Теперь я хотел бы выдать какое-то значение полного исключения, а не просто исключение с числом и сообщением, которые люди должны перехватить, а затем использовать блок if, чтобы проверить, какую ошибку они говорят, что они хотят только перехватить. и сделать что-то значащее с. Что-то вроде TableNotFoundException.

Самая большая проблема в том, что в настоящее время 1999 возможных сообщений об ошибках, теперь я не хочу класс исключений для всех этих ошибок.

Идея SDK заключается в том, что люди используют мои объекты и методы, а не Do и Eval (они могут использовать их, если захотят).

Должен ли я,

  • везде в моем SDK, который я называю Do и Eval, используйте try catch, а затем проверьте код ошибки и выведите оттуда что-то более значимое, потому что я знаю, какие ошибки я должен получить.

или

  • У меня есть список поиска Бога в Do и Eval, что, когда выдается COMException, он ищет код ошибки и выдает оттуда значимую ошибку? То есть мне не нужно заключать каждый вызов в Do и Eval в блоки try try (вызовов много)

Немного сложно объяснить, поэтому я надеюсь, что люди могут это понять.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 18 февраля 2010

Оберните вызовы Do и Eval в вашей собственной функции, которая ловит ошибки MapInfo.

Поскольку существует так много типов ошибок, вы можете создать перечисление с некоторыми более описательными именами или словарь, отображающий числа ошибок в более понятные имена (если исходные не достаточно хороши) - вам не нужно исключение 1999 года классы, поэтому я бы предложил использовать только один класс исключений, который содержит номер ошибки и описание. Вы говорите, что пользователи могут использовать Do и Eval напрямую, поэтому им все равно следует знать, как обрабатывать эти номера ошибок.

В качестве альтернативы, вы можете создать несколько иерархических типов исключений и решить, какой из них генерировать (нужно что-то, сопоставление словаря 0-1999 => соответствующий тип исключения) - таким образом, пользователи могут быть немного более точными относительно того, какие типы ошибок поймать.

0 голосов
/ 18 февраля 2010

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

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

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