C# 数据传输对象(DTO)和;愚蠢的商业目标?

C# 数据传输对象(DTO)和;愚蠢的商业目标?,c#,asp.net,architecture,C#,Asp.net,Architecture,我在应用程序中使用哑业务对象。刚刚使用DTO传输对象的选定属性,但我想知道两者之间的区别是什么?我找不到任何东西。我想说唯一的区别是意图,假设您的愚蠢业务对象只持有状态而没有行为 在这方面: DTO用于在应用程序层之间传输数据 哑业务对象是域模型的一部分 我想说,唯一的区别在于意图,假设您的愚蠢业务对象只持有状态而不持有行为 在这方面: DTO用于在应用程序层之间传输数据 哑业务对象是域模型的一部分 可能有点多余,但我已经打了,所以嘿;) 为了简化(很多),业务对象应该有getter/set

我在应用程序中使用哑业务对象。刚刚使用DTO传输对象的选定属性,但我想知道两者之间的区别是什么?我找不到任何东西。

我想说唯一的区别是意图,假设您的愚蠢业务对象只持有状态而没有行为

在这方面:

  • DTO用于在应用程序层之间传输数据
  • 哑业务对象是域模型的一部分

我想说,唯一的区别在于意图,假设您的愚蠢业务对象只持有状态而不持有行为

在这方面:

  • DTO用于在应用程序层之间传输数据
  • 哑业务对象是域模型的一部分

    • 可能有点多余,但我已经打了,所以嘿;)

      为了简化(很多),业务对象应该有getter/setter方法,而DTO应该只有属性。业务对象需要遵守您的业务规则,但DTO只是用于传输数据;它们不需要遵守任何规则,并且应该设计为能够尽快将数据输入和输出


      在PHP这样的弱类型语言中,DTO并不总是必需的,因为可以动态地为泛型对象提供任意属性。不过,它们对于文档和强类型函数参数仍然很有用。

      可能有点多余,但我已经键入了,所以嘿;)

      为了简化(很多),业务对象应该有getter/setter方法,而DTO应该只有属性。业务对象需要遵守您的业务规则,但DTO只是用于传输数据;它们不需要遵守任何规则,并且应该设计为能够尽快将数据输入和输出

      在PHP这样的弱类型语言中,DTO并不总是必需的,因为可以动态地为泛型对象提供任意属性。不过,它们对于文档和强类型函数参数仍然很有用。

      当您说“哑”业务对象时,实际上是在使这些对象与DTO相同。使业务对象成为业务对象的是验证和其他功能逻辑的添加。当用户说业务对象需要setter和getter方法时,我不同意他说的“否”;他们可以很好地使用属性,他们只需要比任何一个都多得多

      一个常见的观点是,应该允许业务对象持有无效值,并且只有在试图持久化到数据库时才会抛出异常,在这种情况下,属性工作得非常好。然而,大多数应用程序都希望在试图发布到数据库之前,能够向用户提供反馈

      Rockford Lhotka的CSLA.NET方法是对业务对象使用
      IsValid()
      方法,并为对象本身分配一组规则。还有其他方法可以解决这个问题,但关键是业务对象执行验证。正如您所怀疑的,“哑”业务对象实际上只是DTO。

      当您说“哑”业务对象时,实际上是在使这些对象与DTO相同。使业务对象成为业务对象的是验证和其他功能逻辑的添加。当用户说业务对象需要setter和getter方法时,我不同意他说的“否”;他们可以很好地使用属性,他们只需要比任何一个都多得多

      一个常见的观点是,应该允许业务对象持有无效值,并且只有在试图持久化到数据库时才会抛出异常,在这种情况下,属性工作得非常好。然而,大多数应用程序都希望在试图发布到数据库之前,能够向用户提供反馈


      Rockford Lhotka的CSLA.NET方法是对业务对象使用
      IsValid()
      方法,并为对象本身分配一组规则。还有其他方法可以解决这个问题,但关键是业务对象执行验证。正如您所怀疑的,“哑”业务对象实际上只是DTO。

      实际上,我使用DTO绑定了一个大约有30个字段的对象,但我找不到DTO和BO本身之间的任何区别,只找到了更少的字段/属性。在这种情况下,是否推荐DTO,因为我的项目中现在有冗余?@Popo-完全由您决定。什么对您的应用程序有意义?您是否以类似的能力使用这两种产品?他们有同样的责任吗?DTO是否用于解耦?嗯,好的。我现在使用它们只是为了减少大型BO的内存浪费。还有一件事,如果你是我,你会为此使用DTO吗?@Popo-这实际上取决于应用程序的复杂性和分离关注点的需要。如果BO有大量不需要的数据(例如一个大的二进制字段),那么使用DTO来满足这个特定需求听起来是件好事。谢谢,需要专家确认。实际上我使用DTO来绑定一个对象,该对象有大约30个字段,但是我找不到我的DTO和BO本身之间的任何区别,只有更少的字段/属性。在这种情况下,是否推荐DTO,因为我的项目中现在有冗余?@Popo-完全由您决定。什么对您的应用程序有意义?您是否以类似的能力使用这两种产品?他们有同样的责任吗?DTO是否用于解耦?嗯,好的。我现在使用它们只是为了减少大型BO的内存浪费。还有一件事,如果你是我,你会为此使用DTO吗?@Popo-这实际上取决于应用程序的复杂性和分离关注点的需要。如果BO具有大量不需要的数据(例如,一个大的二进制字段),则使用DTO满足此特定需要