gpt4 book ai didi

WCF 数据契约(Contract) - 强制执行所需值的最佳/最干净的方法?

转载 作者:行者123 更新时间:2023-12-05 01:15:29 24 4
gpt4 key购买 nike

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

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

但是,我还希望契约(Contract)中隐含必需的属性,以便客户可以了解需要哪些属性。

所以与其做类似的事情,

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

这将允许我在服务端干净地测试 null,我会这样做:
[DataMember(IsRequired = true, EmitDefaultValue = true)] 
public int AgencyID { get; set; }

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

最佳答案

我不认为将它们全部设为 Null 的好方法,因为这样客户就不会根据您的契约(Contract)知道某个字段是否真的需要。

如果您应用 IsRequired=true 则必须提供字段值,否则它会抛出异常但这种方法比 Nullable 方法要好一些...

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

关于WCF 数据契约(Contract) - 强制执行所需值的最佳/最干净的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13748799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com