C# DTO(数据传输对象)和数据对象之间有概念上的区别吗?

C# DTO(数据传输对象)和数据对象之间有概念上的区别吗?,c#,database,naming-conventions,dto,C#,Database,Naming Conventions,Dto,在我继承的一个项目中,在很多情况下,都有名为XyzDataObject的类。尽管它们被称为DataObject,但在我看来,它们大多像我通常所说的(DTO)。然而,他们有一些特长: 用于仅使用域数据子集的区域(良好) 主要由标准类型属性组成(精细) 用于实例化的超最小逻辑(ok) 将函数从域对象映射到域对象(oops?) 现在我的理解是,这些映射函数应该是分开的 问题: 映射功能是这些对象被称为“数据对象”而不是数据传输对象的原因吗? 或: 这只是一个命名问题吗 他们应该被称为DTO

在我继承的一个项目中,在很多情况下,都有名为
XyzDataObject
的类。尽管它们被称为DataObject,但在我看来,它们大多像我通常所说的(DTO)。然而,他们有一些特长:

  • 用于仅使用域数据子集的区域(良好)
  • 主要由标准类型属性组成(精细)
  • 用于实例化的超最小逻辑(ok)
  • 将函数从域对象映射到域对象(oops?)
现在我的理解是,这些映射函数应该是分开的

问题

  • 映射功能是这些对象被称为“数据对象”而不是数据传输对象的原因吗?
或:

  • 这只是一个命名问题吗 他们应该被称为DTO
  • 是否应命名该文件 因为他们的映射能力,还有别的吗

在我看来,这归结为一个主观命名问题。然而,我认为DTO不应该包含任何逻辑,包括构造函数。我想这取决于我们谈论的是公共API还是后台系统,以及您的团队过去使用了哪些约定。这是一个设计缺陷,因为DTO本身不应该具有映射功能,映射者不应该是他们映射的实体的一部分。将您描述的类错误地称为“DataObjects”只会造成混乱,因为它们看起来只是DTO和映射器的惰性混合。我的拙见是,这归结为主观命名问题。然而,我认为DTO不应该包含任何逻辑,包括构造函数。我想这取决于我们谈论的是公共API还是后台系统,以及您的团队过去使用了哪些约定。这是一个设计缺陷,因为DTO本身不应该具有映射功能,映射者不应该是他们映射的实体的一部分。错误地将您描述的类称为“DataObjects”只会造成混乱,因为它们看起来只是DTO和映射器的惰性混合。