Бросать исключение или возвращаемое значение - PullRequest
1 голос
/ 17 февраля 2010

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

1 Ответ

2 голосов
/ 17 февраля 2010

Мне нравится идея типа Result, используемого для инкапсуляции результатов вызова. Я не знаю, какой язык или структуру вы используете, но я использую универсальный тип C # Result<T>, который представляет результат вызова, который указывает статус результата, необязательное сообщение, необязательный тип результата (как указано T) и необязательный экземпляр Exception (поэтому я могу создать исходное исключение, если я нахожусь в сценарии разработки или отладки).

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

...