Гибкая работа с Exceptions (в основном в WebService)
От: Muromec Россия  
Дата: 30.01.10 22:37
Оценка:
Всем привет,

Cталкивались ли Вы с такой, на мой взгляд, насущной проблемой как обработка исключений в ВебСервисах?
Имеются ввиду достаточно сложные варианты, например, платежный шлюз мобильных и пр. сервисов, где пользователям необходимо отдавать четкие сообщения об ошибках, поддерживать их адекватность, а также есть и коды. Еще и сообщения храняться в БД.
По опыту, в той фирме, где работаю с этим были/есть трудности. Осложняется еще тем, что сообщения могут выводиться на разных языках в зависимости от входного параметра. В общем, в процессе ковыряния в таком коде(где надо сказать, достаточно много различных сообщений об ошибках), иногда было не очень удобно и непросто — работать с нашей самописной библиотекой. В сети того, что придумал — не нашел и решил написать свой велосипед) и таки написал!
Вот хотел узнать интересует ли это кого здесь? Хочу поделиться, обсудить, выслушать мнения.
Основная фишка библиотеки — идея о разделении простого сообщения об ошибке — на 3 составляющие: 1) Описание/Класс ошибки, 2) Причина возникновения 3) Помощь по устранению.
Для затравки — пример(почти reallife), использование такой:

public void CheckIp(string ip)
{
    if(!AllowedIp(ip))
    {
      throw new CException(GDescr.AuthorizationError,GReason.IpNotAllowed,GResolve.CallSupportForAddIp)
    }
}


Наружу выдаст: myCException.Message = Ошбика Авторизации: Обращения с вашего IP-адреса не разрешены. Для добавления IP звоните в службу поддержки.

Следующий пример, показывает что будет, если описать еще и наследников от CException. Делается достаточно прозрачно)

public void CheckAmount(decimal amount)
{
    if( (amount<minAmount) || (amount>maxAmount) )
    {
      throw new IncorrectAmountException(minAmount,maxAmount);
    }
}


Выдаст это: myCException.Message = Некорректное значение входного параметра: amount. Значение числового параметра должно быть в пределах от 10 до 100.
А сам IncorrectAmountException будет состоять из трех ключей:
1) GDescr.IncorrectParamValue
2) GReason — override на значение вх.параметра(из Get строки)
3) myAppResolve.CorrectMyAppAmount (обратите внимание на изменения словаря ключа)
P.S. Как мне кажется, такая же концепция используется в винде, когда, например, проблемы с оборудованием или инетом. Вылезает характерное окошечко).
Если интересно просто в ответе сообщите, опишу поподробнее! Или может скажете, что все уже написано до меня и откроете мне глаза)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.