Menggabungkan Corak Repositori dan Didorong Peristiwa

Susan Sarandon
Lepaskan: 2024-10-09 20:34:02
asal
982 orang telah melayarinya

Combining Repository and Event-Driven Patterns

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
  }
}
Salin selepas log masuk

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
});
Salin selepas log masuk

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);
})();
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
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!