【问题标题】:WCF Data Contract - best/cleanest way to enforce required values?WCF 数据合同 - 强制执行所需值的最佳/最干净的方法?
【发布时间】:2012-11-24 18:54:43
【问题描述】:

我有一个 WCF 数据契约,其中包含一堆原始类型的属性,例如 int 和 decimal,以及 DateTime(当然,它是一个结构)。

我的同事建议让它们都可以为空,然后在服务端通过检查是否为空来验证所需的值。我相信部分原因是因为它是一个可序列化的对象,你不能在数据契约上使用构造函数来强制执行所需的值——它避免了测试默认值的麻烦。

但是,我还希望在合同中隐含所需的属性,以便客户可以了解需要哪些属性。

所以不要做类似的事情,

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

这将允许我在服务端干净地测试 null,我会这样做:

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

据我了解,如果该属性没有被赋值或默认值为 0,这将引发异常 - 这是所需的行为。这是在客户端强制执行所需属性的最佳实践吗?让所有内容都可以为空并在服务端检查它有什么好处吗?

【问题讨论】:

  • 我不确定我是否对您的问题有 100% 的理解……您能在这里分享您的核心目标吗?
  • 好的,我编辑了问题试图澄清。

标签: wcf datacontract non-nullable isrequired


【解决方案1】:

我认为将它们全部设为 Nullable 并不是一个好方法,因为这样客户就不会通过您的合同知道某个字段是否真的需要。

如果您申请IsRequired=true,则必须提供字段值,否则会引发异常,但这种方法相对比 Nullable 更好...

在许多场景中,我将 DTO(数据传输对象)用于不同的服务...具有必填字段...

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
相关资源
最近更新 更多