PHP中的数据传输对象,许多具有相同上下文名称的类

PHP中的数据传输对象,许多具有相同上下文名称的类,php,object,transfer,Php,Object,Transfer,我刚发现有一种DTO模式。我想知道 它们很有用 我的意思是,我应该将所有域对象映射到它们相应的DTO对象,并将它们分配给视图,而不是域对象本身吗?那么,我将拥有许多具有相同上下文名称的类 比如: 用户(域对象) UserDTO UserMapper或UserPersistenceFactory 用户工厂 用户选择工厂 UserUpdateFactory UserAssembler(用于DTO映射) 用户集合 UserViewHelper(可能) 等等。通常,DTO可以帮助您将数据库的数据关注

我刚发现有一种DTO模式。我想知道 它们很有用

我的意思是,我应该将所有域对象映射到它们相应的DTO对象,并将它们分配给视图,而不是域对象本身吗?那么,我将拥有许多具有相同上下文名称的类

比如:

  • 用户(域对象)
  • UserDTO
  • UserMapper或UserPersistenceFactory
  • 用户工厂
  • 用户选择工厂
  • UserUpdateFactory
  • UserAssembler(用于DTO映射)
  • 用户集合
  • UserViewHelper(可能)

等等。

通常,DTO可以帮助您将数据库的数据关注点与使用数据的对象的数据关注点分开。您可以在DTO中放置验证,以确保特定成员遵循特定格式。这样,额外的代码就不会把不关心数据库需要什么的对象弄得乱七八糟

此外,当与数据库间接对话时,DTO将变得强大。然而,这在能够自动生成DTO的语言中更为重要

这是DTO最强大、最引人注目的方面。它可以很容易地自动生成。在PHP中也是如此,但是它需要额外的工具

我明白为什么您可能希望在PHP中使用它们,但是,我必须承认,我自己还没有找到这样做的理由。通常,对于大多数应用程序,Factory+对象就足够了

然而

在具有不直接镜像数据库的对象的应用程序中,DTO再次被授权。例如:一个应用程序中的人员由许多元信息(如地址、个人信息和信用卡)组成,可以对所有个人数据使用DTO,然后使用Person对象处理该数据的所有使用。通过这种方式,交易可以直接通过信用卡DTO进行,没有混乱和麻烦。然后,它可以从卡中访问需要访问的任何数据。然而,只要您想在该信用卡DTO上输入地址,您就不再有严格的DTO