Design Patterns — PHP

Design patterns adalah solusi umum untuk masalah yang sering muncul dalam programming. Catatan Laravel: Laravel adalah framework PHP paling populer. Beberapa co

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.

Yang akan kamu pelajari