Rumah >hujung hadapan web >tutorial js >Menggabungkan Corak Repositori dan Didorong Peristiwa
Tindak balas tak segerak kepada perubahan data boleh dicapai dalam sistem yang mengabstraksi ketekunan data dengan menggabungkan Corak Repositori dengan Seni Bina Didorong Peristiwa. Gabungan ini amat membantu untuk sistem yang memerlukan tindakan tertentu, termasuk mengemas kini sistem luaran, perubahan log atau menghantar pemberitahuan, untuk dimulakan berikutan operasi pangkalan data.
Sekarang mari kita gabungkan kedua-dua corak menjadi contoh.
Pelaksanaan Langkah demi Langkah:
1️⃣ Tentukan Repositori untuk Entiti Pengguna
2️⃣ Memancarkan Peristiwa Apabila Data Berubah
3️⃣ Bertindak balas terhadap Peristiwa Secara Asynchronous
1. Repositori Pengguna dengan Pelepasan Acara
Kami akan melanjutkan contoh UserRepository sebelumnya untuk memancarkan peristiwa apabila tindakan tertentu, seperti penciptaan pengguna, berlaku.
class EventDrivenUserRepository extends InMemoryUserRepository { private eventEmitter: EventEmitter; constructor(eventEmitter: EventEmitter) { super(); this.eventEmitter = eventEmitter; } async save(user: User): Promise<void> { await super.save(user); this.eventEmitter.emit('userCreated', user); // Emit event on user creation } }
Di sini, kami melanjutkan InMemoryUserRepository untuk memancarkan acara userCreated apabila pengguna baharu disimpan.
2. Pelanggan Acara untuk Mengendalikan Logik Perniagaan
Kami kini boleh menentukan pelanggan acara yang akan mendengar acara tertentu dan bertindak balas secara tidak segerak.
const eventEmitter = new EventEmitter(); const userRepository = new EventDrivenUserRepository(eventEmitter); // React to the 'userCreated' event eventEmitter.on('userCreated', (user: User) => { console.log(`New user created: ${user.name}`); // Perform additional tasks, like sending an email });
3. Menggabungkan Repositori dan Didorong Peristiwa dalam Amalan
Mari kita kumpulkan segala-galanya dan simulasi menyelamatkan pengguna dan bertindak balas terhadap acara:
(async () => { const user = { id: '2', name: 'Jane Smith', email: 'jane@example.com' }; await userRepository.save(user); })();
Dalam senario ini, menyimpan pengguna baharu melalui userRepository akan mencetuskan peristiwa userCreated dan pelanggan akan melaksanakan logik yang berkaitan (cth., mengelog atau menghantar pemberitahuan) secara tidak segerak.
Kelebihan Menggabungkan Corak Repositori dan Didorong Peristiwa
?? Seni Bina Terpisah: Repositori hanya bertanggungjawab untuk akses data, manakala logik perniagaan (seperti menghantar pemberitahuan atau memproses kemas kini luaran) dikendalikan oleh pendengar acara. Pengasingan kebimbangan ini membawa kepada kod yang lebih boleh diselenggara.
?? Skalabiliti: Pengendalian acara tak segerak membolehkan sistem menskala lebih baik. Anda boleh menambah lebih banyak pendengar acara dengan mudah untuk bertindak balas kepada acara yang berbeza tanpa mengubah logik repositori teras.
?? Fleksibiliti: Sistem menjadi lebih fleksibel, kerana anda boleh menambah atau mengalih keluar pendengar acara tanpa mengubah suai logik perniagaan teras.
Sebagai contoh, anda boleh menambah tindakan baharu yang dicetuskan oleh penciptaan pengguna, seperti memberitahu perkhidmatan luaran, tanpa mengubah repositori pengguna.
Kesimpulan
Corak Repositori dan Seni Bina Didorong Peristiwa bekerjasama untuk mencipta sistem yang sangat berskala dan dipisahkan. Peristiwa membolehkan komunikasi tak segerak dan respons sistem kepada perubahan keadaan, manakala repositori menawarkan abstraksi untuk akses data. Apabila digabungkan, corak ini membantu anda membina kod yang lebih mudah diselenggara, lebih mudah dibaca dan mampu mengendalikan logik reaktif dan kemas kini masa nyata.
Gabungan ini amat berguna untuk sistem teragih yang canggih di mana pemisahan tanggungjawab dan pemprosesan tak segerak adalah penting, tidak kira sama ada anda sedang membangunkan perkhidmatan mikro atau sistem monolitik.
Atas ialah kandungan terperinci Menggabungkan Corak Repositori dan Didorong Peristiwa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!