Pemerhati Corak Reka Bentuk: sistem pemberitahuan yang berkuasa

DDD
Lepaskan: 2024-09-13 06:33:11
asal
861 orang telah melayarinya

Dalam pembangunan aplikasi anda, anda selalunya memerlukan aplikasi anda untuk dapat bertindak balas terhadap acara secara fleksibel. Sebagai contoh, katakan anda ingin memberitahu berbilang sistem apabila tindakan tertentu berlaku (seperti pendaftaran pengguna). Di sinilah Corak Pemerhati masuk. Corak ini membolehkan anda mewujudkan hubungan antara objek, supaya apabila keadaan satu berubah, semua yang lain dimaklumkan dan dikemas kini secara automatik.

Symfony telah melaksanakan corak ini dengan berkesan terima kasih kepada Penghantar Acara, yang menjadikannya sangat praktikal dan berkuasa untuk digunakan dalam projek anda.

Apakah itu Pemerhati Corak?

Pemerhati Corak membolehkan anda mentakrifkan hubungan antara subjek yang diperhatikan dengan seorang atau lebih pemerhati. Apabila perubahan keadaan berlaku pada objek yang diperhatikan, semua pemerhati dimaklumkan supaya mereka boleh bertindak balas dengan sewajarnya.

Begini cara ia berfungsi:

  • ? Subjek (Boleh Diperhati): Objek utama yang menukar keadaan.
  • ? Pemerhati: Objek yang bertindak balas terhadap perubahan yang boleh diperhatikan.

Contoh

Mari bayangkan anda mempunyai tapak di mana pengguna boleh mendaftar. Dengan setiap pendaftaran, anda ingin menghantar e-mel alu-aluan, menambah pengguna pada senarai surat berita dan memaklumkan sistem analitis.

Daripada mengekodkan semua perkara secara tegar di satu tempat, anda boleh menyerahkan tugasan ini kepada pemerhati berbeza yang akan dimaklumkan sebaik sahaja peristiwa "pengguna berdaftar" dicetuskan.

Melaksanakan Pemerhati Corak dalam Symfony

Dalam Symfony, anda akan menggunakan Penghantar Acara untuk menyediakan Pemerhati Corak. Ini akan membolehkan anda menyusun kod dengan kemas dan menjadikannya boleh dikembangkan tanpa mengubah logik asas.

Langkah 1️⃣: Isytiharkan Acara

Kami akan bermula dengan mencipta acara yang akan dihantar apabila pengguna mendaftar. Yang terakhir akan mengandungi maklumat pengguna.

Le Design Pattern Observer : un système de notification puissant

Langkah 2️⃣: Hantar Acara

Kini, dalam pengawal atau perkhidmatan anda, anda akan menghantar acara ini apabila pengguna mendaftar.

Le Design Pattern Observer : un système de notification puissant

Langkah 3️⃣: Cipta Pemerhati (Pendengar)

Seterusnya, anda perlu mencipta pemerhati, yang akan dipanggil setiap kali acara pendaftaran dihantar. Di sini, anda mempunyai contoh di mana kami menghantar e-mel dan kami menambahkan pengguna pada senarai surat berita.

Pemerhati 1: Hantar e-mel alu-aluan

Le Design Pattern Observer : un système de notification puissant

Pemerhati 2: Tambahkan pengguna pada senarai surat berita

Le Design Pattern Observer : un système de notification puissant

Langkah 4️⃣: Mengkonfigurasi Pemerhati

Anda kini mesti mendaftarkan pendengar dalam konfigurasi supaya mereka mendengar acara pengguna.berdaftar.

Dalam config/services.yaml, tambahkan pemerhati sebagai perkhidmatan:

Le Design Pattern Observer : un système de notification puissant

ℹ️ Sejak versi 5.3 Symfony, anda boleh menggunakan atribut PHP untuk mengkonfigurasi perkhidmatan dan pendengar acara. Ini ialah pendekatan yang lebih moden yang membolehkan anda mengisytiharkan acara terus dalam kelas, dan bukannya menggunakan fail services.yaml.
Oleh itu, anda boleh menggunakan atribut #[AsEventListener] secara langsung pada kaedah pendengar anda.

Saya akan menunjukkan kepada anda cara menyesuaikan dua pemerhati dengan atribut (jadi tidak perlu konfigurasi khas dalam config/services.yaml? :

Pemerhati 1

Le Design Pattern Observer : un système de notification puissant

Pemerhati 2

Le Design Pattern Observer : un système de notification puissant

Sedikit penerangan

  • Atribut #[AsEventListener] menunjukkan bahawa kaedah tersebut ialah pendengar untuk acara tertentu.
  • Argumen pertama atribut ialah nama acara yang sedang didengari oleh pemerhati (UserRegisteredEvent::NAME).
  • Dan akhirnya, parameter kaedah menentukan kaedah kelas yang akan dilaksanakan apabila peristiwa dicetuskan (dalam kes kami, onUserRegistered). ?

Langkah 5️⃣: Uji pelaksanaan

Apabila anda mendaftarkan pengguna dengan RegistrationController, acara itu dihantar dan Symfony secara automatik memanggil pemerhati yang sepadan. E-mel dihantar dan pengguna ditambahkan pada senarai surat berita tanpa tindakan/logik ini dicampur dengan kod perniagaan anda.

Mengapa Menggunakan Pemerhati Corak?

Kerana ia adalah penting! Ia akan membolehkan permohonan anda menjadi:

  1. Lebih fleksibel: anda boleh menambah atau mengubah suai pemerhati tanpa menyentuh kod utama anda. Hanya tambahkan pendengar!
  2. Kurang gandingan: bahagian berlainan apl anda tidak berkait rapat. Contohnya, menghantar e-mel dan menambah pada surat berita tidak dikodkan secara langsung dalam pengawal pendaftaran.
  3. Lebih berskala: corak ini memudahkan untuk bertindak balas terhadap peristiwa yang boleh melibatkan beberapa sistem atau perkhidmatan (pemberitahuan, analitis, penghantaran, dll.).

Bonus: Pautan dengan DDD (Reka Bentuk Dipacu Domain)

Pemerhati Corak sering mendapat tempatnya dalam seni bina berdasarkan DDD (Reka Bentuk Dipacu Domain), di mana acara adalah elemen utama (Acara Domain). Peristiwa ini membenarkan bahagian sistem yang berlainan untuk bertindak balas, selalunya di luar domain utama. Tetapi itu perbincangan untuk artikel penuh masa hadapan tentang DDD!

Atas ialah kandungan terperinci Pemerhati Corak Reka Bentuk: sistem pemberitahuan yang berkuasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!