5

私は、intやdecimalなどのプリミティブ型のプロパティの束を持つWCFデータコントラクトを持っていますDateTime(もちろん、これは構造体です)。

私の同僚は、それらをすべてnull可能にしてから、nullをチェックすることにより、サービス側で必要な値を検証することを提案しました。理由の一部は、シリアライズ可能なオブジェクトであるため、データコントラクトのコンストラクターで必要な値を強制することはできず、デフォルト値をテストするという頭痛の種を回避できることだと思います。

ただし、クライアントが必要なプロパティを把握できるように、必要なプロパティをコントラクトに暗黙的に含めることも必要です。

だから、次のようなことをする代わりに、

[DataMember] 
public Nullable<int> AgencyID { get; set; }

これにより、サービス側でnullをきれいにテストできるようになります。これを行うと、次のようになります。

[DataMember(IsRequired = true, EmitDefaultValue = true)] 
public int AgencyID { get; set; }

プロパティに値が割り当てられていない場合、またはデフォルト値が0の場合、これは例外をスローすることを理解しています。これは望ましい動作です。これは、クライアント側で必要なプロパティを適用するためのベストプラクティスですか?すべてをnull可能にして、代わりにサービス側でチェックすることに利点はありますか?

4

1 に答える 1

7

それらすべてをNullableにするのは良いアプローチではないと思います。そうすると、クライアントは、フィールドが本当に必要かどうかを契約で知ることができないからです。

適用する場合はIsRequired=true、フィールド値を指定する必要があります。そうしないと、例外がスローされますが、このアプローチはNullableよりも比較的優れています...

多くのシナリオで、さまざまなサービスにDTO(データ転送オブジェクト)を使用しました...必須フィールドがあります...

于 2012-12-06T17:31:01.950 に答える