2010-02-18 2 views
3

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

418 "Table not found." 

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

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

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

Должен ли я,

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

или

  • У меня есть somekind Бога списка поиска в Do и Eval, что когда COMException брошено это поисковые операции код ошибки и бросает ошибку Внушительные оттуда? Смысла не должны обернуть каждый вызов Do и Eval в попытке поймать блоков (есть много звонков)

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

Спасибо.

ответ

3

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

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

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

+0

++ Что он сказал, особенно о небольшой иерархии исключений. – Dustman

0

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

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

+0

У кого-то есть проблемы с SEO? Зачем менять текст ссылки со всеми nofollow на нем? – Dustman

Смежные вопросы