要调用支付网关等外部服务,我创建了一个提供程序程序集,例如:MyCompany.Providers.Braintree,它封装了与进行服务调用相关的所有逻辑。它基本上作为通过工作,它包含在自己的程序集中。
让我们说提供商有一个" DoPayment"在网关上调用服务的方法,该服务返回一些状态以及正文消息:
提供者是否应该提供"业务"付款未成功完成时的异常,或者服务基本上是否返回包裹网关返回的类型?
我一直选择不在这种情况下抛出异常,因为基本上这不是异常情况 - 网关成功处理了请求(即使付款未完成也处理了请求)这个过程是Microsoft&# 39;的推荐:
Creating and Throwing Exceptions (C# Programming Guide)
不应将异常用于更改程序的流程,作为普通执行的一部分。例外情况只应用于报告和处理错误情况。
Martin Fowler对此事也有意见,Replacing Throwing Exceptions with Notification in Validations
异常表示超出所讨论代码的预期行为范围的内容
但它与输入验证有关。
你们做什么?