在客户端 - 服务器之间传递可空的最佳方法

时间:2012-07-02 11:17:55

标签: c# .net parameters nullable

假设我有双倍长度可以是实际长度还是未准备好,因为我们在服务器中还没有长度,并且没有任何内容可以发送给客户端。我们需要将此长度从服务器传递到客户端,作为固定数据协议的一部分。客户端目前仅使用该长度一次,但可能比将来使用它更多。

  1. 传递双倍长度和bool isLengthValid,并在每个地方使用长度,检查isLengthValid - 清洁设计而不混合数据类型,但用户必须记住检查

  2. 传递双倍?长度,并在每个使用长度的地方,检查长度== null - 设计很清楚(因为它是可以为空的)但是如果你看起来和类型。此外 - 如果有人在没有检查的情况下使用(好的和坏的,取决于你如何看待它),将会有例外情况。

  3. 创建一个类而不是double。该类将具有GetLengthIfYouCheckedIt或其他东西的清晰界面。 非常易读且很难犯错,但设计有点过头了。

  4. 你的解决方案是什么?

5 个答案:

答案 0 :(得分:3)

我说选项2:

  • 你想要的正是为什么引入了无误的理由。
  • 您可以使用内置的Nullable<double>.HasValue,而不是添加方法来检查是否为有效数字,而不是像它的含义一样。
  • 为长度制作一个类会使其双重关闭:它仅适用于LENGTH并且保持Double。想想你需要为TIME / DateTime,MONEY / Decimal等制作和维护多少个类。它永远不会结束。
  • 选项1只是您自己的已翻转Nullable<T>,其中包含其他名称。

换句话说,执行DRY原则,并使用Nullable<T>;)

HTH,

巴布。

答案 1 :(得分:2)

我通过double?。这基本上是一个双+一个bool值,表明它是否有效所以使用1)选项只会重新发明可空。我认为3)选项太过分了。

答案 2 :(得分:2)

我的建议是使用像这个公共双倍的可空?长度;

你将获得像Length.HasValue和Length.Value这样的方法,这将使代码易于阅读和更快的使用(我的意思是不需要更快地为你编写新类等)

答案 3 :(得分:0)

为什么不将它保留为长度参数,但返回-1

答案 4 :(得分:0)

如果可能,我建议将请求设置为异步,这样在数据准备就绪之前不会向客户端返回任何内容。

如果无法做到这一点,请使用第二个选项。