|
|
1
7
听起来你实际上想返回两个项目:响应代码和找到的对象。您可以考虑创建一个轻量级的包装器,将两者都包含在内并一起返回。
然后,您可以创建一个新的Pair,其中包含您的响应代码和数据。作为使用泛型的副作用,您可以将此包装器重用于您实际需要的任何配对。
此外,如果数据尚未过期,您仍然可以返回它,但给它一个303代码,让他们知道它没有改变。4xx系列将与
|
|
|
2
5
根据给定的要求,你不能这样做。 如果你设计了合同 ,然后添加一个条件并使调用者调用
服务实现如下:
客户保持不变,永远不会注意到你已经预先验证了。 如果你没有设计合同 这可能是有充分理由的,也可能只是设计师(或建筑师)的错。但既然你不能改变它,那么你也不必担心。 然后,您应该遵守规范,并按照以下方式进行操作:
好吧,在这种情况下,你不会发送302,但可能这就是它的设计方式。 我的意思是,出于安全原因,服务器不应该返回比这更多的信息 [探测是get(key,date),只返回null或object] 所以别担心。和你的经理谈谈,让他知道这个决定。也用这个决定来注释代码。如果你手头有建筑师,请确认这一奇怪限制背后的基本原理。 他们很可能没有看到这一点,他们可以根据你的建议修改合同。 有时,在想做对的时候,我们可能会做错,危及我们应用程序的安全性。 与你的团队沟通。 |
|
|
3
3
您可以创建一个特殊的最终CustomObject作为“标记”来表示未更改:
并使用“==”而不是.equals()来测试匹配。 在未更改时返回null并在不存在时抛出异常也可能有效?如果我必须从你的3个中选择一个,我会选择1,因为这似乎是最特殊的情况。 |
|
|
4
3
在我看来,寻找一个不存在的对象似乎是一个特例。再加上一个允许调用者确定对象是否存在的方法,我认为在对象不存在时抛出异常是可以的。
呼叫者可以执行以下操作:
|
|
5
2
异常的问题在于,它们意味着一种“快速失败”的情况(即如果不处理,异常将 停止 由于特殊情况 异常 行为。 我不认为“密钥存在但对象未被修改的情况”是例外情况,当然不是异常情况。 因此,我不会使用异常,而是记录调用者需要执行的操作,以便正确解释结果(属性或特殊对象)。 |
|
|
6
1
对该方法签名的要求有多严格? 你似乎在做一个仍在进行中的项目。如果你的类的消费者是其他开发人员,你能让他们相信他们要求的方法签名是不够的吗?也许他们还没有意识到应该有两种独特的故障模式(密钥不存在,对象未被修改)。 如果可以的话,我会和你的主管讨论一下。 |
|
|
7
1
我仍然会返回null。 该属性的目的是返回在指定日期后修改的对象。如果对没有对象返回null是可以的,那么对未修改的对象返回null也是可以的。 我个人会为未修改的对象返回null,并为不存在的对象抛出异常。这似乎更自然。 顺便说一句,你不使用异常来控制流量是完全正确的,所以如果你只有这3个选项,你的直觉是正确的。 |
|
|
8
1
你可以跟着。的网络库模式,并在名为的自定义对象中有一个公共静态只读字段
自定义对象。空的
那是典型的
自定义对象
(如string.Empty和Guid.Empty)。如果对象未被修改,则可以返回此值(函数使用者需要与之进行比较)。
这为您提供了以下选项
缺点是消费者需要知道null返回值和CustomObject之间的区别。返回值为空。 也许该物业的名称更恰当 自定义对象。未修改 因为Empty实际上是针对Value类型的,因为它们不能为null。而且 未修改 将更容易地向消费者传达该字段的含义。 |
|
|
9
1
关于需求的(预期)接口严重损坏。你试图用一种方法做无关的事情。这是通往软件地狱的道路。 |
|
|
10
1
提供一个Callback作为参数,其中Callback类可以是事件驱动的,也可以是setter驱动的。 您可以让类的接口定义可能发生的各种错误,如果需要,可以将CustomObject作为事件的参数传递。
通过这种方式,您允许回调接口的实现者定义事件发生时要做什么,并且您可以通过接口选择是否需要传递检索到的对象。最后,它降低了返回时逻辑的复杂性。你的方法只做一次。API的实现者根本不需要做这件事,因为它是为他们做的。 |
|
|
11
0
如果可以接受,您可以返回一个放大的CustomObject(包装器),其中包含表示对象及其修改状态(如果有的话)等的值。 |