Clean Architecture Spring Boot Blog
Belajar Clean Architecture
dari Awal
Panduan sederhana untuk developer baru yang ingin memahami pola arsitektur perangkat lunak modern
Clean Architecture (catatan: bedakan dengan clean code) adalah pola arsitektur perangkat lunak yang diciptakan oleh Uncle Bob (Robert C. Martin). Banyak developer merasa bingung saat pertama membaca strukturnya — dan itu wajar, karena pemisahan layer-nya sangat ketat.
Pendekatan terbaik untuk belajar adalah melalui contoh project kecil. Artikel ini menggunakan contoh Blog sederhana dengan Spring Boot yang strukturnya hampir sama dengan project besar.
01 Tujuan Clean Architecture
Sistem yang dibangun dengan Clean Architecture dirancang agar:
- 🧪 Mudah diuji (testable)
- 📖 Mudah dipahami
- 🔧 Mudah diubah (maintainable)
- 🔌 Bebas dari framework tertentu
02 Konsep Dasar: Urutan Layer
Clean Architecture memisahkan sistem ke dalam beberapa layer dengan aturan dependency yang sangat jelas, dari paling dalam ke paling luar:
- Frameworks → Interface Adapters
- Interface Adapters → Use Cases
- Use Cases → Entities
- Entities tahu tentang Use Cases
- Domain tahu tentang Spring/JPA
- Dependency mengarah ke luar
03 Struktur Project Blog
Berikut contoh struktur project Blog sederhana yang mengikuti prinsip Clean Architecture:
com.example.blog │ ├── domain/ │ ├── Article.java │ ├── ArticleRepository.java ← interface only │ └── ArticleNotFoundException.java │ ├── usecase/ │ ├── CreateArticleUseCase.java │ ├── GetArticleUseCase.java │ ├── UpdateArticleUseCase.java │ └── DeleteArticleUseCase.java │ ├── adapter/ │ ├── in/web/ │ │ └── ArticleController.java │ └── out/persistence/ │ ├── ArticleEntity.java │ ├── ArticleMapper.java │ ├── SpringArticleRepo.java │ └── ArticleRepoAdapter.java │ └── config/ └── BeanConfig.java
04 Domain Layer
Layer ini adalah inti dari aplikasi. Di sinilah business rule yang sesungguhnya hidup — tanpa ketergantungan pada framework, database, atau UI.
Hal penting: Repository di domain hanya berupa interface, bukan implementasi database. Domain tidak boleh tahu apakah data disimpan di MongoDB, PostgreSQL, Redis, atau API eksternal.
public interface ArticleRepository { Article save(Article article); Optional<Article> findById(UUID id); List<Article> findAll(); void deleteById(UUID id); }
05 Use Case Layer
Layer ini berisi workflow aplikasi. Setiap UseCase menerima input, menjalankan business logic, memanggil domain repository, lalu menghasilkan output.
UseCase hanya bergantung pada ArticleRepository (interface) — bukan pada Spring Data, MongoRepository, atau JPA. Ini membuat UseCase mudah diuji tanpa database.
06 Interface Adapter Layer
Layer ini berfungsi sebagai jembatan antara dunia luar dan domain. Terdiri dari tiga komponen utama:
6.1 Controller
Menerima request HTTP seperti POST /articles dan GET /articles/{id}, lalu memanggil UseCase yang sesuai.
6.2 Repository Adapter
Karena Domain hanya mendefinisikan interface, kita membutuhkan adapter yang mengimplementasikan interface tersebut menggunakan Spring Data.
public class ArticleRepoAdapter implements ArticleRepository { // menggunakan SpringArticleRepo (Spring Data interface) private final SpringArticleRepo springArticleRepo; // ... implementasi method }
6.3 Mapper
Mapper mengubah object antara layer Domain dan layer Persistence:
07 Framework Layer
Layer paling luar berisi Spring Boot, MongoDB, REST API, dan konfigurasi. Di BeanConfig.java itulah semua dependency di-wire bersama melalui Dependency Injection.
08 Visualisasi Dependency
Semua dependency mengarah ke Domain — tidak pernah keluar.
09 Cara Memulai untuk Pemula
- Apa itu Domain dan kenapa tidak boleh tahu framework
- Apa itu UseCase dan bagaimana dia mengatur alur
- Apa itu Adapter dan peran jembatannya
- Hafalkan Dependency Rule — dependency selalu ke dalam
- Bagaimana UseCase memanggil Repository
- Bagaimana Controller memanggil UseCase
- Bagaimana Adapter menghubungkan Database
- Setelah paham pola dasarnya, struktur project besar akan terasa familiar
- Tulis kode yang konsisten dengan arsitektur yang ada
🎯 Kesimpulan
Memahami Clean Architecture secara langsung bisa terasa sulit karena project yang besar dan domain logic yang kompleks. Pendekatan yang efektif:
- Pelajari Clean Architecture melalui contoh kecil
- Gunakan Blog application sebagai latihan
- Setelah itu baru membaca kode project besar
Dengan metode ini, kamu bisa memahami arsitektur lebih cepat, tidak bingung membaca struktur project, dan menulis kode yang konsisten.
🚀 Mulai Praktek: Buat Blog API →
Comments
Post a Comment