7

好吧,我刚刚发现有这种 DTO 模式。我想知道它们是否有用。

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

像:

  • 用户(域对象),
  • 用户DTO,
  • UserMapper 或 UserPersistenceFactory,
  • 用户工厂,
  • 用户选择工厂,
  • 用户更新工厂,
  • UserAssembler(用于 DTO 映射),
  • 用户集合,
  • UserViewHelper(也许)

ETC...

4

1 回答 1

3

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

此外,在间接与数据库通信时,DTO 变得强大。但是,这在可以自动生成 DTO 的语言中更为重要。

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

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

然而

在具有不直接镜像数据库的对象的应用程序中,DTO 再次获得授权。例如:一个应用程序包含由大量元信息(如地址、个人信息和信用卡)组成的人员,可以将 DTO 用于所有个人数据,然后使用 Person 对象来处理该数据的所有使用。这样一来,一笔交易就可以直接通过信用卡DTO,不费吹灰之力。然后它可以从卡上访问它需要的任何数据。但是,只要您想在该信用卡 DTO 上添加地址,您就不再有严格的 DTO。

于 2010-12-28T20:09:38.170 回答