Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mencipta aplikasi domain berfokus. Pendekatan Symfony (Mengembalikan hasil)

Mencipta aplikasi domain berfokus. Pendekatan Symfony (Mengembalikan hasil)

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-24 01:36:10652semak imbas

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

pengenalan

Ini adalah artikel terakhir siri ini. Dalam artikel sebelumnya kami mencipta perkhidmatan aplikasi yang menggunakan perkhidmatan UserEntityBuilder untuk mencipta entiti. Kemudian, pengurus entiti doktrin (iaitu perkhidmatan infrastruktur) digunakan untuk meneruskan dan menyiram entiti.
Kini, tiba masanya untuk mengembalikan hasil ke lapisan pembentangan.

Saya ingin ingat bahawa kami telah menganggap entiti doktrin sebagai entiti domain sepanjang semua artikel dalam siri ini. Saya faham bahawa ini tidak betul sepenuhnya dan adalah lebih baik untuk memisahkan entiti domain daripada entiti doktrin tetapi, untuk memudahkan, saya akan menyelesaikan artikel ini menggunakan entiti doktrin sebagai entiti domain

Saya sedang menyediakan artikel baharu di mana saya akan menunjukkan cara saya telah menstrukturkan aplikasi Symfony penuh dan di sana anda akan melihat bahawa entiti domain dipisahkan sepenuhnya daripada doktrin.

Mencipta DTO output dan pembina output

Sebelum mengembalikan hasil ke lapisan pembentangan, kita perlu mencipta DTO untuk mewakili data yang ingin kita pulangkan. Bayangkan kita hanya mahu mengembalikan parameter e-mel, firstName, lastName dan dob. DTO keluaran kami akan kelihatan seperti ini:

readonly class UserOutputDto {

    public function __construct(
        public string $email,
        public string $firstName,
        public string $lastName,
        public string $dob,
    ){}
}

Sekarang output DTO sudah sedia, tiba masanya untuk mencipta perkhidmatan untuk membina output daripada entiti. Perkhidmatan ini akan menjadi sebahagian daripada domain kami kerana kami memutuskan maklumat yang akan menjadi sebahagian daripada DTO keluaran.

class UserOutputDTOBuilder {

    public function build(User $user): UserOutputDto
    {
        return new UserOutputDto(
            $user->getEmail(),
            $user->getFirstName(),
            $user->getLastName(),
            $user->getDob()
        );
    }
}

Pembina output agak mudah, ia mencipta UserOutputDto yang menghantar kepada pembina parameter daripada nilai entiti.

Pembina output ini boleh menjadi sebahagian daripada lapisan aplikasi atau pembentangan kerana ia tidak mengandungi sebarang logik tetapi saya akan menyimpannya dalam domain seperti yang saya lakukan dengan UserEntityBuilder.
Ingat bahawa UserEntityBuilder memang mengandungi beberapa logik tambahan:

  • Jana token
  • Jana cap masa semasa

Mengembalikan data

Setelah siap DTO keluaran, sudah tiba masanya untuk menghalakannya ke lapisan pembentangan. Dalam kes kami, elemen apakah yang membentuk lapisan pembentangan?. Dengan mengambil kira bahawa kami akan menjana Symfony JsonResponse dan mengembalikannya sebagai respons HTTP, pengawal akan menjadi elemen yang akan mewakili lapisan pembentangan kami. Mari kita kembali kepadanya.

readonly class UserOutputDto {

    public function __construct(
        public string $email,
        public string $firstName,
        public string $lastName,
        public string $dob,
    ){}
}

Sebagai sebahagian daripada lapisan pembentangan, pengawal symfony menggunakan bahagian infrastrukturnya (fungsi AbstractController json) untuk menjana JsonResponse daripada data DTO output yang sedia untuk dikembalikan dalam Respons HTTP.
Seperti yang anda lihat, pengawal symfony juga menggunakan perkhidmatan aplikasi lain (DataProcessor dan UserCreator) untuk melaksanakan proses panggilan API.

Kesimpulan

Dalam artikel akhir siri ini, kami meneroka proses mengembalikan data ke lapisan pembentangan dalam aplikasi Symfony. Kami bermula dengan mencipta Output Data Transfer Object (DTO) untuk merangkum data pengguna yang ingin kami kembalikan, khususnya e-mel, nama pertama, nama keluarga dan tarikh lahir. Kami kemudiannya membangunkan perkhidmatan UserOutputDTOBuilder untuk membina DTO ini daripada entiti pengguna, menekankan kepentingan menentukan maklumat yang disertakan dalam output.
Akhir sekali, kami menunjukkan cara pengawal Symfony bertindak sebagai lapisan pembentangan, menggunakan fungsi JsonResponse untuk mengembalikan data DTO sebagai respons HTTP.

Atas ialah kandungan terperinci Mencipta aplikasi domain berfokus. Pendekatan Symfony (Mengembalikan hasil). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn