Project Python yang awalnya kecil sering tumbuh menjadi besar tanpa disadari. Logika bisnis tercampur dengan kode database, kode framework menempel di mana-mana, dan satu perubahan kecil bisa merusak banyak hal yang tidak terduga. Kondisi seperti ini membuat developer takut mengubah kode, dan rasa takut itu membuat project semakin sulit berkembang. Clean architecture adalah jawaban untuk masalah ini. Arsitektur ini memisahkan logika bisnis dari hal-hal teknis seperti framework dan database, sehingga aturan utama aplikasimu tetap bersih dan mudah dipahami. Prinsip ini sangat terasa manfaatnya saat membangun REST API FastAPI, karena API yang besar sangat mudah berantakan tanpa pemisahan yang jelas.
Ide utama clean architecture sederhana, yaitu bagian terpenting dari aplikasimu tidak boleh bergantung pada bagian yang paling mudah berubah. Logika bisnis harus bisa diuji tanpa database, tanpa framework, dan tanpa jaringan. Ketika aturan ini dipegang, kamu bisa mengganti database, mengganti framework, atau menambah fitur baru tanpa menulis ulang seluruh aplikasi. Artikel ini membahas lapisan-lapisan clean architecture, aturan ketergantungan yang mengikatnya, dan contoh struktur folder yang bisa langsung kamu tiru. Untuk melengkapi pemahamanmu, pelajari juga design pattern, karena banyak pattern dipakai untuk menghubungkan antar lapisan dengan rapi.
Lapisan Clean Architecture Python dari Domain sampai Infrastruktur
Lapisan paling dalam adalah domain, tempat aturan bisnis tinggal. Di sinilah ada entity dan use case yang menjelaskan apa yang dilakukan aplikasi, tanpa peduli apakah datanya disimpan di Postgres, MySQL, atau sekadar berkas. Lapisan ini tidak boleh mengimpor apa pun dari framework atau pustaka database, karena ia harus tetap murni dan mudah dipahami. Jika seseorang membaca kode domain, ia harus langsung mengerti aturan bisnis tanpa harus memahami teknologi di sekitarnya.
Di luar domain ada lapisan application yang mengatur alur kerja, lalu lapisan interface adapter yang mengubah data dari dunia luar menjadi bentuk yang dipahami domain. Lapisan paling luar adalah infrastruktur, tempat framework, database, dan API pihak ketiga berada. Pemisahan seperti ini sejalan dengan pemakaian decorator Python untuk menambah perilaku tanpa mengubah logika inti, dan akan jauh lebih mudah diterapkan bila struktur project sudah rapi sejak awal. Gunakan type hint di setiap lapisan supaya batas antar lapisan terlihat jelas dan kesalahan tipe mudah ditemukan.
Dependency Rule dan Cara Menerapkannya di Project Python
Dependency rule adalah aturan emas clean architecture, yaitu ketergantungan kode hanya boleh mengarah ke dalam, tidak pernah ke luar. Lapisan dalam tidak boleh tahu apa pun tentang lapisan luar. Artinya, kode domain tidak boleh mengimpor modul database atau framework web. Sebaliknya, lapisan luar boleh bergantung pada lapisan dalam, karena tugasnya memang melayani kebutuhan domain. Aturan ini menjaga logika bisnis tetap stabil, meskipun teknologi di sekelilingnya terus berubah.
Untuk menerapkan aturan ini di Python, gunakan interface berupa abstract base class atau protocol. Lapisan domain mendefinisikan interface yang dibutuhkannya, misalnya interface penyimpanan pengguna, lalu lapisan infrastruktur menyediakan implementasi nyatanya. Dengan cara ini, domain tidak pernah mengimpor kode database, tetapi tetap bisa memakai database lewat interface. Pendekatan ini membuat testing Pytest menjadi jauh lebih mudah, karena kamu bisa mengganti implementasi asli dengan versi palsu saat pengujian. Perhatikan juga query database tetap efisien di lapisan infrastruktur, dan siapkan deploy Docker yang memisahkan konfigurasi dari kode, supaya aplikasi yang sama bisa berjalan di banyak lingkungan tanpa diubah.
Contoh Struktur Folder Clean Architecture Python yang Mudah Diuji
Struktur folder yang baik mencerminkan lapisan arsitektur. Buat folder domain untuk entity dan use case, folder application untuk service dan interface, folder infrastructure untuk implementasi database dan API eksternal, lalu folder presentation untuk router dan controller. Setiap folder punya tanggung jawab yang jelas, sehingga developer baru bisa langsung tahu di mana harus mencari dan mengubah sesuatu. Jangan biarkan satu folder raksasa berisi puluhan berkas tanpa pola, karena itu adalah awal dari kekacauan.
Keuntungan terbesar dari struktur ini terasa saat pengujian. Use case bisa diuji dengan implementasi palsu yang cepat, tanpa perlu menjalankan database sama sekali. Ketika semua use case sudah teruji, barulah implementasi nyata diuji secara terpisah. Pola ini juga membantu saat membangun sistem rekomendasi, karena logika rekomendasi bisa diuji tanpa harus melatih model setiap kali. Sebelum menerapkan clean architecture pada project yang sudah berjalan, ukur dulu bagian yang lambat dengan profiling kode supaya refactoring tidak merusak performa. Untuk panduan praktis tentang tata letak project Python yang baik, baca panduan struktur aplikasi Python yang membahas pola layout yang umum dipakai di project nyata.
Clean architecture bukan tentang menambah banyak folder demi terlihat canggih, melainkan tentang melindungi logika bisnis dari perubahan teknologi. Pisahkan domain dari framework, patuhi dependency rule, dan uji setiap lapisan secara terpisah. Dengan disiplin ini, project Pythonmu akan tetap mudah diubah dan mudah dirawat, sebesar apa pun ia tumbuh nanti.

