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