Design patterns adalah solusi umum untuk masalah yang sering muncul dalam programming.
Catatan Laravel: Laravel adalah framework PHP paling populer. Beberapa contoh di lesson ini menggunakan Eloquent ORM dari Laravel sebagai ilustrasi real-world. Kamu tidak perlu menguasai Laravel dulu — cukup paham konsep pattern-nya. Kita akan belajar Laravel lebih dalam di kategori Laravel.
Repository Pattern:
interface UserRepository {
public function findById(int $id): ?User;
public function findAll(): array;
public function save(User $user): void;
}
class DatabaseUserRepository implements UserRepository {
public function findById(int $id): ?User {
// Query database
}
// ...
}
class InMemoryUserRepository implements UserRepository {
private array $users = [];
public function findById(int $id): ?User {
return $this->users[$id] ?? null;
}
// ...
}
Keuntungan: bisa swap implementasi tanpa ubah kode yang menggunakan repository.
Dependency Injection:
class OrderService {
public function __construct(
private UserRepository $users,
private PaymentGateway $payment,
) {}
public function placeOrder(int $userId, array $items): Order {
$user = $this->users->findById($userId);
// ... logic
}
}
Dependensi di-inject dari luar, bukan dibuat di dalam class. Membuat testing lebih mudah.
Builder Pattern:
// Contoh di Laravel (Eloquent Query Builder):
$query = User::query()
->where("active", true)
->orderBy("name")
->limit(10)
->get();
Eloquent Query Builder dari Laravel menggunakan pola ini — setiap method mengembalikan $this untuk chaining. Kita akan belajar detail Eloquent di kategori Laravel.