public CustomObject get(String key,Date ifModifiedSince)
基本上,当且仅当对象在ifModifiedSince之后被修改时,该方法应该返回与该关键字关联的CustomObject.如果存储系统不包含密钥,则该方法应返回null.
我的问题是这样的:
如何处理密钥存在但对象尚未修改的情况?
这很重要,因为使用这个类的一些应用程序将是Web服务和Web应用程序.那些应用程序将需要知道是否返回404(未找到)304(未修改)或200(OK,这里是数据).
我正在衡量的解决方案是:
>抛出一个自定义异常
存储系统不包含
键
>抛出一个自定义异常
ifModifiedSince失败.
>将属性添加到CustomObject.要求来电者检查财产.
我对这三个选项都不满意.我不喜欢选项1和2,因为我不喜欢使用例外流控制.当我的意图是表示没有价值时,我也不喜欢返回值.
不过,我倾向于选择3.
有没有选择我不考虑?有人对这三种选择有强烈的感觉吗?
这个问题的答案,释义:
>提供一个包含
方法,并要求调用者调用它
在调用get(key,
ifModifiedSince),throw
异常如果键不存在,
如果对象尚未返回null
改性.
包装回应和数据(如果有的话)
在复合对象中.
>使用预定义的常量来表示一些状态(UNMODIFIED,KEY_DOES_NOT_EXIST).
> Caller实现接口
用作回调.
>设计很烂
为什么我不能选择答案#1
我同意这是理想的解决方案,但我已经(不情愿地)被解雇了.这种方法的问题是,在大多数使用这些类的情况下,后端存储系统将是第三方远程系统,如Amazon S3.这意味着包含的方法将需要往返存储系统,这在大多数情况下应该是另一个往返行程.因为这样会花时间和金钱,所以不是一个选择.
如果不是这个限制,这将是最好的方法.
(我意识到我没有提到这个问题的重要因素,但我正在努力保持简短,显然这是相关的.)
结论:
在阅读了所有答案之后,我得出结论,在这种情况下,包装是最好的方法.本质上,我将模仿HTTP,包含元数据(标题),包括响应代码和内容正文(消息).