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.
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:
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.
Kini, kami memerlukan perkhidmatan yang akan bertanggungjawab menyelaraskan proses yang terlibat dalam menyelamatkan entiti:
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 :)
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.
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!