Arsitektur dari sebuah sistem software adalah suatu bentuk yang diberikan kepada sistem tersebut oleh pengembangnya, di mana bentuk model tersebut merupakan pembagian sistem menjadi komponen – komponen , penyusunan antar komponen, dan bagaimana cara antar komponen dapat berkomunikasi satu sama lain. Tujuan dari dibentuknya code software sedemikian rupa tersebut adalah supaya dapat memfasilitasi pengembangan, deployment, operasional, dan maintenance dari software yang disusun. Tujuan utama dari arsitektur jelas untuk mendukung siklus hidup sebuah sistem. Sehingga arsitektur yang bagus akan membuat sebuah sistem software menjadi lebih mudah dikembangkan, lebih mudah dideploy, lebih mudah di-maintain, serta lebih mudah dipahami kodenya. Tujuan ini memberikan gol utama keberhasilan berupa berkurangnya biaya keseluruhan software menjadi lebih kecil dan meningkatnya produktifitas dari developer software.
Selama ini banyak arsitektur software mulai dari N-Tier arsitektur, 3 Tire arsitektur, Monolitik arsitektur, Event driven arsitektur, Microservice arsitektur, Service Oriented Architecture (SOA arsitektur), dan yang paling sederhana adalah client server arsitektur. Clean Architecture adalah sebuah filosofi dan prinsip desain pengembangan aplikasi yang diperkenalkan oleh Robert C. Martin, tujuannya adalah membangun sistem yang mudah dipahami, dikembangkan, diuji, dan dipelihara dalam jangka panjang. Konsep utama dari Clean Architecture adalah memisahkan kode program ke dalam beberapa lapisan yang membentuk cincin (seperti lapisan bawang). Lapisan terdalam berisi logika bisnis utama, dan lapisan-lapisan luar menangani hal-hal seperti framework, basis data, dan antarmuka pengguna (UI). Tujuan/objective dari clean architecture adalah pemisahan concern , di mana pemisahan concert ini dicapai dengan cara membagi kode software ke dalam lapisan lapisan / layer berlapis.

Clean architecture memiliki prinsip karakteristik sebagai berikut
- Independen dari Framework. Arsitektur tidak bergantung pada keberadaan library tertentu atau suatu framework tertentu. Logika bisnis utama harus terbebas dari suatu framework tertentu, dan menganggap framework dan library tertentu hanyalah sebuah tool. Apabila kita mengganti suatu framework dari WebForm ke MVC maka seharusnya bisnis logik tidak berubah.
- Testable dan dapat diuji. Bisnis logik utama dapat diuji tanpa perlu adanya UI, database, web server,atau komponen external lain.
- Independen dari UI. UI harus dapat diubah dengan mudah tanpa perlu melibatkan perubahan bisnis logik ataupun bagian sistem lainnya. UI dapat diubah dari web-UI ke desktop-UI atau console tanpa mempengaruhi bisnis logik.
- Independen dari Basis Data. Bisnis rule dan bisnis logik tidak terikat dengan database. Kita dapat mengganti basis data dari SQL Server ke Oracle dengan mudah tanpa mempengaruhi bisnis logik.
- Independen dari berbagai agen modul external. Bisnis rule dan logika bisnis aplikasi tidak perlu tahu mengenai interface lapisan terluar ataupun interface ke sisi luar aplikasi.
Aturan Dependency / Ketergantungan pada Clean Architecture
Pada gambar 1 menggambarkan lingkaran konsentris yang merepresentasikan berbagai area yang ada di dalam kode suatu software. Semakin menjauh maka semakin tinggi level nya pada software, lapisan lebih luar merupakan mekanisme, dan lapisan lebih dalam merupakan policy. Prinsip ketergantungan yang berlaku adalah, semua ketergantungan harus mengarah ke sisi yang lebih dalam, tidak dapat sisi lebih dalam bergantung ke lapisan sisi yang lebih luar. Tidak ada lapisan yang lebih dalam bisa mengetahui apapun yang ada di lapisan yang lebih luar. Segala macam implementasi di lapisan yang lebih luar, baik itu class, function, variable, entity yang ada di lapisan lebih luar, tidak boleh disebutkan atau dijadikan reference oleh lapisan yang lebih dalam. Format data yang digunakan pada lapisan lebih luar sebaiknya tidak digunakan oleh lapisan yang lebih dalam. Dengan menerapkan aturan ini, circle lebih dalam tidak akan memiliki ketergantungan dengan circle lapisan lebih luar, sehingga apapun yang terjadi di lapisan lebih luar tidak akan berdampak di lapisan lebih dalam.
Lapisan Layer Clean Architecture
Secara sederhana, Robert C. Martin menggambarkan bahwa filosofi clean architecture memiliki 4 layer umum meliputi entities, use cases, interface adapters, framework & drivers.
- Entities : lapisan terdalam dan paling independen dari aplikasi yang berupa bisnis rule / logika bisnis inti dan domain. Entities bisa berupa bisnis object, yang mengenkapsulasi bisnis rule secara umum dan general. Perubahan operasional seperti perubahan paging di aplikasi atau security seharusnya tidak berdampak pada entities.
- Use Case : merupakan lapisan berisi logika bisnis spesifik pada aplikasi yang mengkoordinasikan / mengatur aliran data dari dan ke entity. Lapisan use case menentukan bagaimana lapisa entitas digunakan untuk memenuhi kebutuhan bisnis pada aplikasi (Misal create user yang menggunakan entitas user, create order yang menggunakan entitas order).
- Interface Adapter : merupakan lapisan yang menjembatani lapisan bisnis logic dengan lapisan detail / framework. Tugasnya adalah untuk sebagai adapter yang menjembatani konversi data antara format data yang dapat digunakan pada lapisan luar dengan format data yang bisa digunakan pada lapisan lebih dalam atau sebaliknya. Interface adapter dapat berupa Web Api controller, MVC web controller, atau gui presenter.
- Framework & Drivers : merupakan lapisan terluar yang berisi detil teknis dan implementasi yang sangat bergantung pada semua lapisan di dalamnya. Web framework seperti asp.net core view, react js, bootstrap, atau webform asp.net pada web adalah contoh detil implementasi.
Sederhananya, lapisan lapisan pada clean architecture bersifat skematis. 4 Lapisan tersebut hanyalah skema sederhana yang mengilustrasikan filosofi dari clean architecture yang dibuat oleh Robert C. Martin ketika dirinya menjelaskan filosofi dari clean architecture. Penerapannya bisa lebih banyak atau lebih sedikit lapisan. Implementasi Clean Architecture yang berbeda sering kali menggunakan nama yang berbeda untuk lapisannya. Contohnya, lapisan Entitas sering disebut “Domain,” lapisan Kasus Penggunaan sering disebut “Aplikasi,” dan lapisan Frameworks & Drivers sering disebut “Infrastruktur” atau “Presentasi”.
Apakah harus 4 Layer
There’s no rule that says you must always have just these four. However, The Dependency Rule always applies. Source code dependencies always point inwards. As you move inwards the level of abstraction increases. The outermost circle is low level concrete detail.
Clean architecture tidak membatasi berapa layer yang dimiliki, apakah harus 4 layer ataukah boleh lebih dari 4 layer. Namun penekanannya adalah arah dari dependency / aturan dependency, dan level dari abstraction yang digambarkan pada lingkaran konsentris dari clean architecture.
Untuk aplikasi yang sangat sederhana, bahkan beberapa lapisan dapat digabung sehingga hanya memiliki sedikit lapisan. Sementara untuk aplikasi komplek, suatu lapisan dapat dipecah lagi. Namun yang terpenting adalah lapisan berapapun jumlahnya harus mengikuti aturan ketergantungan / dependency dari clean architecture, selama lapisan luar bergantung pada lapisan dalam, dan logika bisnis inti bisa tetap independen.


Dalam menerapkan clean architecture, kita harus fokus pada prinsip, bukan struktur kaku. Daripada berfokus pada nama dan jumlah lapisan, yang terpenting adalah mematuhi prinsip inti clean architecture berikut:
- Isolasi Logika Bisnis: Pastikan logika bisnis utama (Domain dan Aplikasi) benar-benar terisolasi dari detail eksternal seperti framework, basis data, dan UI.
- Aturan Ketergantungan: Pastikan semua dependensi mengarah ke dalam. Ini memastikan bahwa perubahan pada komponen di lapisan luar tidak memengaruhi komponen di lapisan dalam.
Kesimpulan
Clean architecture adalah salah satu arsitektur dari perangkat lunak yang bertujuan untuk memudahkan pengembangan, maintenance, deployment , dan membuat kode lebih mudah dipahami. Clean architecture berpusat pada pemisahan concern pada kode aplikasi menjadi lapisan lapisan yang terlihat seperti lingkaran konsentris berlapis lapis mirip seperti bawang. Aturan utama yang wajib dipatuhi pada clean architecture adalah lapisan dalam tidak bisa mengakses lapisan luar, namun lapisan luar sangat bergantung dengan lapisan di sebelah dalamnya. Secara sederhana lapisan clean architecture dapat berupa layer entities, use case, interface adapter, dan framework & driver. Meski demikian, clean architecture tidak membatasi jumlah layer dan nama lapisan sepanjang mengikuti prinsip aturan ketergantungan dan isolasi logika bisnis.
Referensi:
Martin, R.C., 2018, Clean Architecture: A Craftsman’s Guide to Software
Structure and Design, Prentice Hall, New York.
Martin, R.C., 2012, The Clean Architecture, https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html, dikunjungi pada 2025-10-16
Smith, S., 2023, Architecting Modern Web Applications with ASP.NET Core and Microsoft Azure, Microsoft Press, Washington.