Всем привет,
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. Как мне кажется, такая же концепция используется в винде, когда, например, проблемы с оборудованием или инетом. Вылезает характерное окошечко).
Если интересно просто в ответе сообщите, опишу поподробнее! Или может скажете, что все уже написано до меня и откроете мне глаза)