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.
Demonstrasikan Hexagonal Architecture: domain service bergantung pada port (interface), bukan adapter konkret.
Implementasikan:
1. createInMemoryUserRepo() — adapter test-only. Return object dengan method:
findById(id) → user atau nullsave(user) → simpanall() → array semua user2. createRegisterUserService(userRepo, emailer) — domain service. Return function register(id, name):
userRepo.findById(id) — jika ada, throw "User exists"userRepo.save({ id, name })emailer.send(id, "Welcome " + name)3. createFakeEmailer() — adapter fake untuk test. Return object dengan send(id, msg) dan property sent (array history).
Tujuan exercise: service TIDAK tahu userRepo pakai in-memory atau Postgres. Bisa swap implementasi tanpa ubah service.