Mengetahui design pattern itu bagus. Tapi yang lebih penting adalah tahu kapan menggunakannya — dan kapan tidak perlu.
Panduan cepat — pilih pattern berdasarkan masalah:
| Masalah | Pattern | Contoh |
|---|---|---|
| Perlu encapsulation / organisasi kode | Module | ES Modules, custom hooks |
| Satu perubahan harus memberi tahu banyak tempat | Observer | Event listeners, useState |
| Hanya boleh ada 1 instance | Singleton | Config, DB connection, Store |
| Pembuatan object yang kompleks/bervariasi | Factory | createElement, createServer |
| Behavior yang bisa ditukar saat runtime | Strategy | Sorting, validation, pricing |
| Menambah fitur tanpa mengubah kode asli | Decorator | Logging, caching, retry |
| Request diproses berurutan oleh banyak handler | Middleware | Express, Redux middleware |
| Komunikasi loose coupling antar module | Pub/Sub | Event bus, WebSocket |
| Pisahkan data, logic, tampilan | MVC/MVVM | React + hooks, Express |
| Abstraksi akses data | Repository | TanStack Query, Eloquent |
Red flags — tanda kamu over-engineering:
// BURUK: Singleton untuk hal yang tidak perlu singleton
class StringUtilsSingleton {
static instance = null;
static getInstance() {
if (!this.instance) this.instance = new StringUtilsSingleton();
return this.instance;
}
capitalize(str) { return str[0].toUpperCase() + str.slice(1); }
}
// BAIK: Cukup fungsi biasa!
function capitalize(str) {
return str[0].toUpperCase() + str.slice(1);
}
// BURUK: Factory untuk 1 tipe
class ButtonFactory {
create() { return { type: "button", text: "Click" }; }
}
// BAIK: Langsung buat object
const button = { type: "button", text: "Click" };
Prinsip memilih pattern:
- YAGNI (You Aren't Gonna Need It) — jangan pakai pattern "jaga-jaga"
- Start simple, refactor later — mulai dengan kode sederhana, tambah pattern saat complexity muncul
- Satu pattern per masalah — jangan stack pattern yang tidak perlu
- Baca kode framework — lihat pattern apa yang dipakai React, Express, dll
Workflow yang disarankan:
1. Tulis kode sederhana yang bekerja
2. Identifikasi pain point (duplikasi, coupling, complexity)
3. Pilih pattern yang menyelesaikan pain point spesifik
4. Refactor secara bertahap
5. Review — apakah kode jadi lebih mudah dipahami?
Pattern yang paling sering dipakai di JavaScript modern:
- Module — setiap hari, setiap project
- Observer — React, event handling, real-time features
- Strategy — validation, pricing, sorting, formatting
- Middleware — Express, API calls, data pipeline
- Factory — saat butuh create banyak variant object
Ingat: Pattern adalah alat, bukan tujuan. Kode yang mudah dibaca dan di-maintain lebih berharga dari kode yang "menggunakan banyak pattern". Gunakan pattern saat mereka membuat kode lebih sederhana, bukan lebih rumit.