Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mencipta aplikasi domain berfokus. Pendekatan Symfony (Menyimpan entiti)

Mencipta aplikasi domain berfokus. Pendekatan Symfony (Menyimpan entiti)

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-17 03:30:04744semak imbas

Creating focused domain applications. A Symfony approach (Saving the entity)

pengenalan

Dalam siaran ketiga siri ini, kami akan mencipta entiti yang sedia untuk disimpan ke pangkalan data daripada DTO yang kami cipta dalam artikel pertama siri ini.

Mengubah UserInputDTO menjadi entiti

Untuk bermula dengan bahagian ini, mari kita anggap kita menggunakan doktrin untuk berkomunikasi dengan pangkalan data dan entiti Pengguna kami kelihatan seperti ini:

#[ORM\Entity(repositoryClass: UserRepository::class)]
class User
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\Column(length: 150)]
    private string $firstname;

    #[ORM\Column(length: 255)]
    private string $lastname;

    #[ORM\Column(length: 25)]
    private string $dob;

    #[ORM\Column]
    private \DateTimeImmutable $createdAt;

    #[ORM\Column]
    private string $token;

    // getters and setters
}

Medan e-mel, nama pertama, nama keluarga dan dob akan diisi dengan nilai UserInputDTO dan medan createdAt dan token akan diisi mengikut peraturan seterusnya:

  • Medan createdAt akan memegang tarikh semasa.
  • Medan token akan mengandungi rentetan 50 aksara abjad angka.

Memandangkan kami telah memutuskan cara kami akan mengisi medan entiti, bahagian kod ini akan menjadi milik domain kerana ia mengandungi peraturan perniagaan domain. Jadi, kami memerlukan domain perkhidmatan untuk melakukan perkara itu. Jom kodkan.

class UserEntityBuilder {

    public function buildEntity(UserInputDTO $userInputDto): User
    {
        $user = new User();
        $user->setEmail($userInputDto->email);
        $user->setFirstname($userInputDto->firstname);
        $user->setLastname($userInputDto->lastname);
        $user->setDob($userInputDto->dob);
        $user->setToken(bin2hex(random_bytes(50)));
        $user->setCreatedAt(new \DateTimeImmutable());

        return $user;
    }
}

Seperti yang anda lihat, kaedah UserEntityBuilder buildEntity mencipta entiti Pengguna mengikut peraturan yang telah ditetapkan dan mengembalikan entiti.

Perkhidmatan aplikasi untuk mencipta dan menyimpan entiti

Kini, kami memerlukan perkhidmatan yang akan bertanggungjawab menyelaraskan proses yang terlibat dalam menyelamatkan entiti:

  • Mencipta entiti Pengguna dengan menggunakan perkhidmatan domain UserEntityBuilder kami yang baru dibuat.
  • Menggunakan perkhidmatan doktrin EntityManager untuk mengekalkan entiti pada pangkalan data. Perkhidmatan EntityManager harus dianggap sebagai perkhidmatan infrastruktur kerana ia disediakan oleh rangka kerja Symfony melalui komponen symfony/orm-packnya.

Jom kodkannya.

class UserCreator {

    public function __construct(
        private readonly UserEntityBuilder $userEntityBuilder,
        private readonly EntityManagerInterface $em,
    ){}

    public function createUser(UserInputDTO $userInputDto): object
    {
        $user = $this->userEntityBuilder->buildEntity($userInputDto);
        $this->em->persist($user);
        $this->em->flush();

        return '.....'; // Return a DTO ready to be used by the presentation layer
    }
}

Seperti yang anda lihat dalam kod di atas, perkhidmatan lapisan aplikasi UserCreator menggunakan UserEntityBuilder dahulu untuk mencipta entiti dan kemudian menggunakan pengurus entiti Doktrin untuk menyimpannya ke pangkalan data .

Anda mungkin perasan bahawa baris "kembali" tidak lengkap. ¿ Apa yang patut kita kembali ke sini?. Kita akan lihat dalam artikel seterusnya dan terakhir siri ini :)

Bagaimana pula dengan entiti. Adakah mereka tergolong dalam domain tersebut?

Ini soalan yang bagus. Pada pendapat saya, mereka akan tergolong dalam domain kami kerana, walaupun mereka mewakili pemetaan jadual pangkalan data kepada objek dalam aplikasi kami, mereka merangkum keputusan kami mengenai model data projek.
Kini, hakikat bahawa mereka boleh tergolong dalam domain kami tidak bermakna mereka boleh digunakan sebagai DTO. Mereka harus diasingkan dan hanya digunakan untuk menyimpan data ke pangkalan data dan menerima data dari sana.

Kesimpulan

Dalam artikel ketiga ini, kami telah mencipta perkhidmatan domain untuk mencipta entiti Pengguna sedia untuk diteruskan ke pangkalan data dan juga telah mencipta perkhidmatan aplikasi yang menyimpan entiti ke pangkalan data dengan menggunakan perkhidmatan domain untuk mencipta pengguna dan pengurus entiti doktrin untuk menyimpannya.
Dalam artikel seterusnya dan terakhir, kita akan belajar panas untuk mencipta DTO output dengan maklumat pengguna yang disimpan sedia untuk dikembalikan ke lapisan pembentangan.

Jika anda menyukai kandungan saya dan suka membacanya dan anda berminat untuk mengetahui lebih lanjut tentang PHP, anda boleh membaca ebook saya tentang cara mencipta API berorientasikan operasi menggunakan PHP dan Rangka Kerja Symfony. Anda boleh menemuinya di sini: Membina Api Berorientasikan Operasi menggunakan PHP dan Rangka Kerja Symfony: Panduan langkah demi langkah

Atas ialah kandungan terperinci Mencipta aplikasi domain berfokus. Pendekatan Symfony (Menyimpan entiti). 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