空值与未设置值

Chr*_*isV 5 wcf design-patterns datacontract

我们编写了一个Web服务,它使用一个简单的实体转换器将DTO的值映射回"真正的"服务器端业务对象.作为这个练习的一部分.我们在显式设置空值未设置值的客户端之间遇到了"有趣"的区别.

问题本质上是我们想要在客户端没有显式设置值的情况下在实际业务对象上设置默认值,但是使用标准可空类型无法判断客户端是否明确表示" 将此设置为null "或者只是不设置它.

这里的解决方案显然是某种"旗帜".

在业务对象中,我们可以使用属性设置器中设置的私有"IsDirty"标志在内部跟踪字段的状态,但是DTO只是真正指定了接口,因此这意味着将此数据公开给公众.这留下了许多实现选项.语言是C#(所以静态类型)所以......

  1. 我们可以在每个属性上公开一个"IsSet"标志吗?
  2. 我们可以将每个属性公开为具有.Value和.IsSet属性的类吗?等等

如何选择在数据合同中公开这些"标志"?你在这里认为最佳做法是什么?

对此的任何意见将不胜感激.

ste*_*ell 3

为每个属性值使用一个类比为每个属性声明一个 bool 更具可扩展性。它还使您能够选择哪些属性可以留空和/或设置为 null。