我有一个 WCF 数据契约,其中包含一堆原始类型的属性,如 int 和 decimal,以及DateTime
(当然,它是一个结构)。
我的同事建议让它们都可以为空,然后通过检查是否为空来验证服务端所需的值。我相信部分原因是,由于它是一个可序列化的对象,因此您无法使用数据协定上的构造函数强制执行所需的值 - 它避免了测试默认值的麻烦。
但是,我还希望在合同中隐含所需的属性,以便客户可以了解需要哪些属性。
所以不要做类似的事情,
[DataMember]
public Nullable<int> AgencyID { get; set; }
这将允许我在服务端干净地测试 null,我会这样做:
[DataMember(IsRequired = true, EmitDefaultValue = true)]
public int AgencyID { get; set; }
我的理解是,如果该属性没有被赋值或默认值为 0,这将引发异常——这是所需的行为。这是在客户端强制执行所需属性的最佳实践吗?让所有内容都可以为空并在服务端检查它有什么好处吗?