Latihan 1: Ports & Adapters (Hexagonal Architecture) — Design Patterns

Latihan 1 dari materi Ports & Adapters (Hexagonal Architecture) di Design Patterns — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Starter sudah merakit service dengan dua adapter, mendaftarkan u1 Budi dan u2 Ani, mencoba mendaftarkan u1 lagi, lalu membuat service kedua dengan adapter baru, dan mencetak tujuh baris; bagian itu tetap. Lengkapi tiga function:

  1. createInMemoryUserRepo(): simpan const users = [] di dalamnya, lalu kembalikan object dengan findById(id) (user dengan id itu, atau null kalau gak ada), save(user) (push ke users), dan all() (kembalikan users).
  2. createFakeEmailer(): simpan const sent = [], lalu kembalikan { sent: sent, send(id, msg) { sent.push({ id: id, msg: msg }) } }.
  3. createRegisterUserService(userRepo, emailer): kembalikan function register(id, name) yang:
    • mengecek dulu: kalau userRepo.findById(id) menemukan user, throw new Error('User exists');
    • membuat const user = { id: id, name: name } lalu memanggil userRepo.save(user);
    • memanggil emailer.send(id, 'Welcome ' + name);
    • mengembalikan user.

Service-nya cuma memakai findById, save, dan send, jadi adapter apa pun yang punya method itu bisa dipasang.

Console harus mencetak tujuh baris ini, berurutan:

  1. Budi
  2. 1
  3. u1
  4. Welcome Budi
  5. 2
  6. User exists
  7. 1

Yang juga dinilai: mendaftarkan "a" dua kali menolak yang kedua dan penyimpanannya tetap berisi satu user, jadi User exists|1; dan register("z9", "Sari") mengembalikan user Sari, findById("z9") menemukan Sari, dan email pertamanya Welcome Sari, jadi Sari|Sari|Welcome Sari.

Hint