2010-02-16 131 views
1

我正在服务导向架构中使用另一项服务。我的服务使用其他服务将数据保存到数据库中。对我来说,重新抛出我从保存服务中获得的异常是很好的做法,或者我应该捕获异常并将其封装在结果中,然后将结果发送回去。抛出异常或返回值

回答

2

我喜欢用于封装调用结果的Result类型的想法。我不知道您使用的是什么语言或框架,但我使用C#泛型类型Result<T>,它表示调用的结果,它表示结果状态,可选消息,可选结果类型(如T所示),和一个可选的Exception实例(所以如果我处于开发或调试场景中,我可以发出原始异常)。

从安全角度来看,让您的异常详细信息向初始化客户端冒泡,因为您可能会无意中暴露有关您的应用程序或您的某个依赖关系的内部操作的敏感信息。此外,它看起来很糟糕,而且消费者更难以使用。如果某个资源可能失败,最好将该调用包装在try/catch中,并通过异常策略路由任何异常,并返回一个否定结果,而不是让客户端崩溃。

+0

谢谢你。至于我使用Java 1.4的语言 – pete