首頁 >後端開發 >php教程 >創建專注的領域應用程式。 Symfony 方法(傳回結果)

創建專注的領域應用程式。 Symfony 方法(傳回結果)

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-24 01:36:10706瀏覽

Creating focused domain applications. A Symfony approach (Returning the result)

介紹

這是本系列的最後一篇。在上一篇文章中,我們建立了一個應用程式服務,它使用 UserEntityBuilder 服務來建立實體。然後,使用條令實體管理器(這是一個基礎設施服務)來持久化和刷新實體。
現在,是時候將結果返回到表示層了。

我想記住,在本系列的所有文章中,我們都將學說實體視為域實體。我知道這並不完全正確,最好將域實體與學說實體分開,但為了簡單起見,我將使用學說實體作為域實體來完成本文

我正在準備一篇新文章,我將在其中展示我如何構建完整的 Symfony 應用程序,在那裡您將看到域實體與學說完全解耦。

建立輸出 DTO 和輸出建構器

在將結果傳回表示層之前,我們需要建立一個DTO來表示我們想要傳回的資料。假設我們只想回傳 emailfirstNamelastNamedob 參數。我們的輸出 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 控制器還使用其他應用程式服務(DataProcessorUserCreator)來執行 API 呼叫程序。

結論

在本系列的最後一篇文章中,我們探索了在 Symfony 應用程式中將資料傳回表示層的過程。我們首先建立一個輸出資料傳輸物件 (DTO) 來封裝我們想要傳回的使用者數據,特別是電子郵件、名字、姓氏和出生日期。然後,我們開發了一個 UserOutputDTOBuilder 服務來從使用者實體建立此 DTO,強調定義輸出中包含哪些資訊的重要性。
最後,我們示範了 Symfony 控制器如何充當表示層,利用 JsonResponse 功能將 DTO 資料作為 HTTP 回應傳回。

以上是創建專注的領域應用程式。 Symfony 方法(傳回結果)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn