为什么数据合同中的私有字段通过公共字体修改?

时间:2012-06-21 21:12:27

标签: c# .net wcf

创建新的WCF项目时,会为您生成示例服务。默认数据合同是(我刚刚更改了字符串类型字段标题):

[DataContract]
public class CompositeType
{
    bool boolValue = true;
    string name = "";

    [DataMember]
    public bool BoolValue
    {
        get { return boolValue; }
        set { boolValue = value; }
    }

    [DataMember]
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

拥有私人字段 boolValue 名称的重点是什么?在合同中编写一些数据清理或其他操作是一种好的做法,因此膨胀吗?这似乎是我不直接写字段的唯一理由。那么它是一个英国媒体报道,还是背后有一些原因呢?

3 个答案:

答案 0 :(得分:2)

在我看来,DataContracts的唯一目的应该是在域之间传输数据。验证/清理逻辑应该超出DataContract的职责范围。特别是如果目的是在多个项目/平台中共享/链接代码文件以供重用。

这也意味着您不应该在应用程序的其他位置使用DataContract对象。它应该通过某种适配器或转换器来读取/写入特定于应用程序的对象的内容。它在转换(或您的应用程序对象)中可以进行一些验证。数据传输层越简单越好。

通常,您可以在setter / getters中添加日志/调试代码(最好是临时的)以根据需要跟踪数据输入/输出。到目前为止,这是唯一一个我认为可以在DataContract对象中放置任何而不是简单属性的情况(再次,我只是暂时这样做)。

编辑:至于为什么这是默认生成的文件,我不确定。我的DataContract对象始终使用自动属性。我建议在引入自动属性之前这可能是对.NET 2.0的回归,但无论如何都不会引入WCF / DataContracts。

答案 1 :(得分:1)

您为任何私有值编写getter和setter的原因相同,有助于帮助封装并允许您操纵类的内部工作,而不必担心外部成员因为直接操作变量而破坏。

答案 2 :(得分:1)

简短的回答是,公共属性允许您(设计人员)在将值分配给您的私有字段之前限制它们,从而可能使您无法处理意外数据。虽然大多数get和set方法都是相同的,但它们通常是防止坏数据的第一道防线。