Latihan 1: CQRS (Command Query Responsibility Segregation) — Design Patterns
Latihan 1 dari materi CQRS (Command Query Responsibility Segregation) di Design Patterns — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Starter sudah menjalankan empat command, dua query, dan mencetak lima baris; bagian itu tetap. Lengkapi createUserCQRS() supaya mengembalikan object dengan execute, query, dan writeCount:
Siapkan const writeStore = [] (sisi tulis) dan const readModel = {} (sisi baca) di dalamnya.
execute(command): kalau command.id kosong, throw new Error('id wajib diisi'); kalau command.name kosong, throw new Error('name wajib diisi'). Periksa sebelum menulis. Kalau sah, writeStore.push(command) lalu readModel[command.id] = { id: command.id, name: command.name }. Ini berlaku untuk RegisterUser maupun UpdateName.
query(query): untuk { type: 'GetUser', id } kembalikan readModel[query.id]; untuk { type: 'GetAllNames' } kembalikan nama-nama dari readModel yang diurutkan naik: Object.values(readModel).map((u) => u.name).sort().
writeCount(): kembalikan writeStore.length.
Console harus mencetak lima baris ini, berurutan:
Budi S.
Ani,Budi S.
3
caught invalid
3
Yang juga dinilai: RegisterUser u9 Sari lalu UpdateName u9 Sari W. menghasilkan nama Sari W. dan writeCount()2. Dan sesudah satu RegisterUser yang sah, command dengan id: '' ditolak, jadi writeCount() tetap 1.
Hint
Command mengubah data dan memeriksanya dulu, query cuma membaca. Simpan command yang sah di writeStore, lalu perbarui readModel saat itu juga supaya query bisa langsung membacanya.