抛出异常或返回值

时间:2010-02-16 21:06:43

标签: exception-handling soa

我在面向服务的体系结构中使用其他服务。我的服务使用其他服务将数据保存到数据库中。对我来说,重新抛出我从保存服务获得的异常是一种好习惯,还是应该捕获异常并将其封装在我的结果中然后再将结果发回。

1 个答案:

答案 0 :(得分:2)

我喜欢用于封装调用结果的Result类型的想法。我不知道您使用的语言或框架,但我使用C#泛型Result<T>来表示调用的结果,它指示结果状态,可选消息,可选结果类型(如指示的那样) by T),以及一个可选的Exception实例(如果我在开发或调试方案中,我可以发出原始异常)。

从安全角度来看,让您的异常详细信息冒泡到初始客户端是不受欢迎的,因为您可能会无意中泄露有关应用程序或其中一个依赖项的内部操作的敏感信息。此外,它看起来很糟糕,让消费者更难以使用。如果资源可能出现故障,最好将该调用包装在try / catch中,并通过异常策略路由任何异常并返回否定Result,而不是让客户端爆炸。