2011-08-19 192 views
1

我必须设计一个DAO,可以调用REST WS。 此WS必须从给定的用户名和密码中返回用户凭证。Rest Dao设计和异常处理

案例1:找到用户=> REST WS发送http代码200和凭证响应。

情况2:未找到用户=> REST WS发送http代码400和一个包含原因的错误对象。

案例3:找到了用户但他的帐户被禁用了=> REST WS发送了http代码400和错误对象与原因。

案例4:REST WS不可

什么是我的DAO映射REST WS响应的最佳方式?

1 - 我在我的DAO中抛出funtionnal checked异常来处理错误对象的情况,并且我在正常情况下返回凭证响应对象。当REST WS不可用时,我抛出未经检查的异常

2 - 我不会在我的DAO中抛出任何函数异常,因为它是服务层的工作。我返回REST WS返回的内容,例如包装对象中的凭证响应和错误响应,例如,我让服务层检查这些对象以执行正确的工作。当REST WS不可用时,我抛出一个未经检查的异常

3 - 我只对错误情况抛出未经检查的异常,并让服务层决定如何处理它。我只返回凭证响应。

非常感谢您提前。

回答

1

我更喜欢选项1,因为您的DAO负责理解远程数据源返回的内容。您的服务层位于DAO之上,不需要了解远程源的任何复杂性;这包括如何通过电线返回错误。

+0

好的,谢谢,并为检查VS选中的选择?为什么1而不是3? – rico

+0

我的_个人首选项总是在服务层可以做一些值得做的事情时进行检查。这迫使服务层dev真正考虑当用户没有找到时会发生什么,等等。 99%的时间一些业务规则将决定一些特殊的逻辑应该发生。根据我的经验,对'未找到'类型条件进行未检查通常只会在运行时结束于NPE。我真的很喜欢编译时间检查。 – Brad

1

HTTP协议中的4XX响应被定义为客户端错误,我认为可以在DAO层中引发异常。那么错误对象就是抛出异常的表示。

如果您应该抛出一个检查或未经检查的异常可能会持续很长的讨论,并最终基础取决于个人的喜好或项目一般编码准则。通过抛出异常,您可以将异常类型映射到相应的HTTP错误代码,例如BadCredentialsException成为HTTP错误400任何不能映射成为一个500内部服务器错误