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:

  1. Siapkan const writeStore = [] (sisi tulis) dan const readModel = {} (sisi baca) di dalamnya.
  2. 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.
  3. 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().
  4. writeCount(): kembalikan writeStore.length.

Console harus mencetak lima baris ini, berurutan:

  1. Budi S.
  2. Ani,Budi S.
  3. 3
  4. caught invalid
  5. 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