@Service & @Repository: Layering
Penjelasan
Spring Boot MENDORONG KERAS pola tiga layer: @RestController (HANYA menangani HTTP request/response), @Service (logika bisnis), @Repository (akses data ke database). Pemisahan ini membuat tiap layer punya tanggung jawab jelas dan mudah dites terpisah — konsisten dengan pola serupa di NestJS/Symfony.
Contoh Konsep
@Service
public class ProdukService {
private final ProdukRepository produkRepository;
public ProdukService(ProdukRepository produkRepository) {
this.produkRepository = produkRepository;
}
public List<Produk> ambilSemua() {
return produkRepository.findAll();
}
}
@RestController
public class ProdukController {
private final ProdukService produkService;
public ProdukController(ProdukService produkService) {
this.produkService = produkService;
}
@GetMapping("/produk")
public List<Produk> findAll() {
return produkService.ambilSemua();
}
}
Praktikum
Buat @Service ArtikelService yang meng-inject ArtikelRepository, method ambilSemua() memanggil artikelRepository.findAll(). Buat ArtikelController yang meng-inject ArtikelService dan mengekspos endpoint GET /artikel.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Controller SEBAIKNYA tidak pernah memanggil Repository LANGSUNG (lompat layer) — selalu lewat Service, meski logikanya cuma satu baris seperti contoh di atas, supaya kalau nanti logikanya berkembang jadi lebih kompleks, kamu tidak perlu memindahkan kode dari Controller ke Service, cukup tambah di tempatnya sejak awal.