Pengertian Clean Architecture

Clean Architecture adalah sebuah konsep desain perangkat lunak yang dikembangkan oleh Robert C. Martin (Uncle Bob). Tujuannya adalah membuat sistem yang mudah dipahami, dikembangkan, diuji, dan dipelihara dalam jangka panjang.
Clean Architecture memisahkan kode program menjadi beberapa lapisan (layers) yang berbeda, dengan aturan ketat tentang bagaimana lapisan-lapisan tersebut berinteraksi.
Clean Architecture punya 4 layer utama:
|-----------------------------|
| External Interfaces | → Controller, UI, CLI
|-----------------------------|
| Interface Adapters | → Presenter, Gateway impl
|-----------------------------|
| Application (Use Cases) | ← DI SINI letaknya Use Case
|-----------------------------|
| Domain Entities | ← Entity, Value Object
|-----------------------------|
- Entities (Domain Layer) – Berisi bisnis logika inti aplikasi, objek bisnis, dan aturan bisnis yang paling penting
- Use Cases (Application Layer) – Berisi logika aplikasi yang spesifik, misalnya operasi yang bisa dilakukan pengguna, proses bisnis yang lebih spesifik. Mengatur bagaimana data dari entitas digunakan untuk menjalankan kebutuhan aplikasi.
- Interface Adapters (Interface Layer) – Menyesuaikan data antara dunia luar (UI, database, web service) dengan format yang digunakan di lapisan dalam. Bisa berupa presenter, controller, gateway, repository.
- Frameworks and Drivers (Infrastructure Layer) – Bagian terluar yang berisi implementasi teknologi, misalnya database, UI, web framework, library eksternal. Lapisan ini boleh berubah tanpa mengganggu logika inti.
Prinsip utama Clean Architecture
- Dependency Rule: arah ketergantungan (dependency) hanya mengarah ke dalam, dari lapisan luar ke lapisan dalam. Jadi, lapisan dalam tidak bergantung pada lapisan luar. ( Dependencies hanya mengarah ke dalam:
UserRepository → UserService → User ) - Independen terhadap framework: kode inti tidak bergantung pada framework tertentu, sehingga mudah migrasi ke teknologi lain.
- Testable: lapisan dalam mudah diuji tanpa perlu bergantung pada UI, database, atau layanan eksternal.
- UI dan Database bisa berubah tanpa mengganggu bisnis logika.
Struktur Clean Architecture Paling sederhana :
app/
├── Authentication/
│ └── Entities/ ← Aturan bisnis inti
│ └── UseCases/
│ └── LoginService.php ← Use Case / Interactor
│
├── Interfaces/ ← Adapter input/output
│ ├── Controllers/
│ └── Presenters/
│
└── Infrastructure/ ← Framework, database, external tools
├── Repositories/
└── Laravel/
Tujuan utama Clean Architecture (CA) itu buat:
- Membuat kode lebih mudah dipahami
Karena kode dipisah jadi beberapa lapisan yang jelas tanggung jawabnya, jadi programmer gampang ngerti apa yang terjadi di tiap bagian. - Meningkatkan maintainability (kemudahan pemeliharaan)
Kalau ada perubahan di teknologi, UI, atau database, kamu bisa ubah di lapisan luar tanpa harus mengutak-atik bisnis logika di dalamnya. - Membuat kode lebih fleksibel dan scalable
Struktur yang terorganisir bikin aplikasi bisa berkembang dengan baik tanpa bikin kode jadi kacau. - Meningkatkan testability (kemudahan pengujian)
Karena lapisan bisnis logika terpisah dan independen, kamu bisa menulis unit test dengan mudah tanpa perlu bergantung pada UI atau database. - Meminimalisasi ketergantungan teknologi
Business rules tidak bergantung sama teknologi tertentu, jadi kalau mau ganti framework, library, atau database, lebih gampang tanpa ganggu bagian inti aplikasi. - Membantu tim bekerja lebih efisien
Dengan pemisahan yang jelas, tiap developer bisa fokus di bagian tertentu tanpa banyak konflik, misal ada yang fokus di UI, ada yang di bisnis logika.