我需要创建一些DTO类来跨WCF传输业务对象.
由于这些只是没有功能的数据包,有什么理由我不能只使用字段,还是有一些很好的理由将它们作为属性正确地公开?
//fields
[DataContract]
class CustomerDTO
{
[DataMember] public int Id;
[DataMember] public string Name;
}
//or properties?
[DataContract]
class CustomerDTO
{
[DataMember] public int Id { get; set; }
[DataMember] public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ann 17
如果可以的话,我最喜欢具有只读字段的不可变 DTO:
public class CustomerDTO
{
public CustomerDTO(int id, string name)
{
Id = id;
Name = name;
}
public readonly int Id;
public readonly string Name;
// Override Equals and GetHashCode as well...
}
Run Code Online (Sandbox Code Playgroud)
不可变记录有很多优点,例如结构相等,这使得自动化测试断言的编写更加简单。它还免除了编写和维护单独的测试数据生成器的需要。
不过,这取决于序列化程序。JSON.NET 可以处理不可变记录,但许多其他序列化程序不能。
对于那些处理公共字段的人,我更喜欢字段而不是属性,只是因为它更诚实;自动实现的读/写属性不提供封装。
一些序列化器坚持公共属性,并且不序列化字段。如果是这种情况,你就必须这样做。
老实说,考虑到我在这方面投入了多少心思,这并不是让我彻夜难眠的事情,因为最终,在边界上,应用程序不是面向对象的。因此,OOD 的规则无论如何都不适用于 DTO。
由于这些只是没有功能的数据包,有什么理由我不能只使用字段
这里没有反对公共领域的有力论据。但是要意识到这只是因为 DTO 内部没有逻辑(行为),所以封装的正常论点不成立。
我仍然更喜欢属性,但在这里它们并不是必需的。
| 归档时间: |
|
| 查看次数: |
2021 次 |
| 最近记录: |