假设我有双倍长度可以是实际长度还是未准备好,因为我们在服务器中还没有长度,并且没有任何内容可以发送给客户端。我们需要将此长度从服务器传递到客户端,作为固定数据协议的一部分。客户端目前仅使用该长度一次,但可能比将来使用它更多。
传递双倍长度和bool isLengthValid,并在每个地方使用长度,检查isLengthValid - 清洁设计而不混合数据类型,但用户必须记住检查
传递双倍?长度,并在每个使用长度的地方,检查长度== null - 设计很清楚(因为它是可以为空的)但是如果你看起来和类型。此外 - 如果有人在没有检查的情况下使用(好的和坏的,取决于你如何看待它),将会有例外情况。
创建一个类而不是double。该类将具有GetLengthIfYouCheckedIt或其他东西的清晰界面。 非常易读且很难犯错,但设计有点过头了。
你的解决方案是什么?
答案 0 :(得分:3)
我说选项2:
Nullable<double>.HasValue
,而不是添加方法来检查是否为有效数字,而不是像它的含义一样。Double
。想想你需要为TIME / DateTime
,MONEY / Decimal
等制作和维护多少个类。它永远不会结束。Nullable<T>
,其中包含其他名称。换句话说,执行DRY原则,并使用Nullable<T>
;)
HTH,
巴布。
答案 1 :(得分:2)
我通过double?
。这基本上是一个双+一个bool值,表明它是否有效所以使用1)选项只会重新发明可空。我认为3)选项太过分了。
答案 2 :(得分:2)
我的建议是使用像这个公共双倍的可空?长度;
你将获得像Length.HasValue和Length.Value这样的方法,这将使代码易于阅读和更快的使用(我的意思是不需要更快地为你编写新类等)
答案 3 :(得分:0)
为什么不将它保留为长度参数,但返回-1
?
答案 4 :(得分:0)
如果可能,我建议将请求设置为异步,这样在数据准备就绪之前不会向客户端返回任何内容。
如果无法做到这一点,请使用第二个选项。