这是本系列的最后一篇文章。在上一篇文章中,我们创建了一个应用程序服务,它使用 UserEntityBuilder 服务来创建实体。然后,使用条令实体管理器(这是一个基础设施服务)来持久化和刷新实体。
现在,是时候将结果返回到表示层了。
我想记住,在本系列的所有文章中,我们都将学说实体视为域实体。我知道这并不完全正确,最好将域实体与学说实体分开,但为了简单起见,我将使用学说实体作为域实体来完成本文
我正在准备一篇新文章,我将在其中展示我如何构建完整的 Symfony 应用程序,在那里您将看到域实体与学说完全解耦。
在将结果返回到表示层之前,我们需要创建一个DTO来表示我们想要返回的数据。假设我们只想返回 email、firstName、lastName 和 dob 参数。我们的输出 DTO 如下所示:
readonly class UserOutputDto { public function __construct( public string $email, public string $firstName, public string $lastName, public string $dob, ){} }
现在输出 DTO 已准备就绪,是时候创建一个服务来构建实体的输出了。该服务将成为我们域的一部分,因为我们决定哪些信息将成为输出 DTO 的一部分。
class UserOutputDTOBuilder { public function build(User $user): UserOutputDto { return new UserOutputDto( $user->getEmail(), $user->getFirstName(), $user->getLastName(), $user->getDob() ); } }
输出构建器非常简单,它创建一个 UserOutputDto 将实体值中的参数传递给构造函数。
此输出构建器可以是应用程序或表示层的一部分,因为它不包含任何逻辑,但我会将其保留在域中,就像对 UserEntityBuilder 所做的那样。
请记住,UserEntityBuilder 确实包含一些额外的逻辑:
- 生成令牌
- 生成当前时间戳
准备好输出 DTO 后,就可以将其定向到表示层了。在我们的例子中,哪些元素构成了表示层?考虑到我们将生成 Symfony JsonResponse 并将其作为 HTTP 响应返回,控制器将是代表我们表示层的元素。让我们回到正题。
readonly class UserOutputDto { public function __construct( public string $email, public string $firstName, public string $lastName, public string $dob, ){} }
作为表示层的一部分,symfony 控制器使用其基础设施部分(AbstractController json 函数)从输出 DTO 数据生成 JsonResponse,准备在HTTP 响应。
如您所见,symfony 控制器还使用其他应用程序服务(DataProcessor 和 UserCreator)来执行 API 调用过程。
在本系列的最后一篇文章中,我们探索了在 Symfony 应用程序中将数据返回到表示层的过程。我们首先创建一个输出数据传输对象 (DTO) 来封装我们想要返回的用户数据,特别是电子邮件、名字、姓氏和出生日期。然后,我们开发了一个 UserOutputDTOBuilder 服务来从用户实体构建此 DTO,强调定义输出中包含哪些信息的重要性。
最后,我们演示了 Symfony 控制器如何充当表示层,利用 JsonResponse 功能将 DTO 数据作为 HTTP 响应返回。
以上是创建专注的领域应用程序。 Symfony 方法(返回结果)的详细内容。更多信息请关注PHP中文网其他相关文章!