這是本系列的最後一篇。在上一篇文章中,我們建立了一個應用程式服務,它使用 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中文網其他相關文章!