- 1
- 2
- 3
- 4
- 5
- 6
- 7
Exception Myex;
int responseVal = HelperMethods.DoPost(url, postdata, "text/xml; charset=utf-8", ref xmlResponse, null, out Myex);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(new StringReader(xmlResponse));
string StatusID = xmlDoc.ChildNodes[1].ChildNodes[0].FirstChild.Value;
if (StatusID.ToLower() != "0")
Уморил. :D
и остальное излишне
Myex здесь так создается/передается что бы DoPost() вместо бросания эксепшна, просто его возвращал в переменной?
выглядит интересным компромисом для интерфейсов что бы эксепшены бросались опционально.
да
>Myex здесь так создается
не создаётся, лишь объявляется
будет создана лишь в DoPost, и то не обязательно
если не создаст, то вернёт null
и в лучших традициях ГК эта эксепшн после вызова не проверяется... ГК однозначно.
не выглядит
тогда теряется весь смысл исключений
в таком случае проще вернуть экземпляр класса ошибки, код ошибки, или HRESULT
на тот случай, если я не понял - можте привести пример для случая с интерфейсом
(С++) у нас в некоторых интерфейсах народ передает в функцию выходным параметром строка. вызываемая функция, в случае ошибки ложит в строку сообщени(е,я) об ошибке. с одной стороны требования производительности не позляют всегда бросать эксепшены, с другой стороны в значении возвращаемым функцией нет дырок для индикации ошибки.
вообщем, как бы у нас уже подобное говно испольнуется, только вместо эксепшена используется строка. меня привлекает возможность опционально бросать эксепшн ИЛИ не бросать эксепшн, но пользоватся тем же самым объектом (а не тупой строкой) для индикации ошибки.
если действительно беспокоит скорость, то возвращали бы код ошибки типа enum, а не строки
это какая-то полумера
как вы эти ошибки потом обрабатываете\ отлавливаете? неужели сравниваете строку на совпадение? Х_Х
с перформансом там проблема что в некоторых реализациях С++ бросание эксепшенов очень дорого.
народ не хочет напрягатся конвертацией enum -> sting, или какой GetLastError(), поэтому сразу возвращают строку.
типа вместо эксепшен со строкой энкапсулированой, используется просто строка.
> как вы эти ошибки потом обрабатываете\ отлавливаете? неужели сравниваете строку на совпадение? Х_Х
если строка пустая, значит вызов функции был успешен. если не пустая - тогда ошибка и строка прямиком идет в лог. как правило если функция обломалась, тогда и вся транзакция обламывается.
вообщем, на самом деле то строка не так далеко от эксепшена: по сути в 99% случаев из эксепшена берется только содержимое `getMessage();`. только что выглядит в коде говновато. можно даже было бы сделать что если строка есть NULL то бросать эксепшн. но в том коде нет (потому что не нужно было) своего класса эксепшена.
я знаю
и всё же использование строк, как ошибок - это полумера и ошибка проектирования
если однажды понадобится это переписать на другой механизм работы с ошибками - можно легко запариться
самописный велосипед, std::string или указатель на символ (PxChar)?
да граблями там все разложено это факт.
во врмя эксепшена происходит ещё 9ть и они все в десятером спускаются "до дна стека" о_О
С++ такого не позволяет
?
злейшее зло
многопоточные приложения при неверной реализации очень веселят в таких ситуациях
Каждому свой last error
2)
>многопоточные приложения при неверной реализации очень веселят
Обратите внимание на выделенное слово. А я видел очень много не верных реализаций паттерна GetLastError.
теперь мы исключение создаем, но не бросаем,а вовзращаем в качестве флага!