2

サーバーにはまだ長さがなく、クライアントに送信するものがないため、実際の長さか、まだ準備ができていない可能性のある2倍の長さがあるとします。この長さを固定データ プロトコルの一部としてサーバーからクライアントに渡す必要があります。クライアントは現在、長さを 1 回だけ使用していますが、将来はそれ以上使用する可能性があります。

  1. double length と bool isLengthValid を渡し、length を使用するすべての場所で isLengthValid かどうかを確認します

  2. ダブルパス?長さ、および長さを使用するすべての場所で、長さ ==null かどうかを確認します-デザインは明確です (null 可能であるため) が、タイプを見てください。また、誰かがチェックせずに使用した場合は例外になります (良いか悪いかは、見方によって異なります)。

  3. double の代わりにクラスの長さを作成します。クラスには、GetLengthIfYouCheckedIt などの明確なインターフェイスがあります。非常に読みやすく、間違いを犯しにくいですが、デザインは少しやり過ぎです。

あなたの解決策は何ですか?

4

5 に答える 5

3

私はオプション2と言います:

  • あなたが望むのは、正確にnullablesが導入された理由です。
  • 有効な数値かどうかをチェックするメソッドを追加する代わりに、組み込みの をそのまま使用しNullable<double>.HasValueます。
  • Length のクラスを作成すると、二重に閉じられます。これは LENGTH のみであり、Double. DateTimeTIME/ 、 MONEY/などのために、そのようなクラスをいくつ作成して維持する必要があるかを考えてくださいDecimal。それは決して終わりません。
  • オプション 1 はNullable<T>、別の名前で再ラップされた独自のロールです。

つまり、DRY 原則を適用し、Nullable<T>;)を使用します。

HTH、

バブ。

于 2012-07-02T11:26:52.583 に答える
2

私は . を渡しますdouble?。これは基本的に double + 有効かどうかを示す bool 値であるため、1) オプションを使用すると、null 許容が再発明されます。3) オプションはやり過ぎだと思います。

于 2012-07-02T11:21:53.090 に答える
2

私のアドバイスは、この public Double のように nullable を使用することですか? 長さ;

Length.HasValue や Length.Value などのメソッドを取得すると、コードが読みやすくなり、すばやく使用できるようになります (つまり、新しいクラスなどをすばやく作成する必要はありません)。

于 2012-07-02T11:39:18.630 に答える
0

長さのパラメーターとして保持するだけでなく、返すのは-1なぜですか?

于 2012-07-02T11:19:45.710 に答える
0

可能であれば、データが実際に準備されるまでクライアントに何も返さないように、リクエストを非同期にすることをお勧めします。

それが不可能な場合は、2 番目のオプションを使用してください。

于 2012-07-02T11:53:03.433 に答える