Screaming Architecture: Auman Fitur vs Framework

Sat. Jun 20th, 2026 11:49 PM2 mins read
Screaming Architecture: Auman Fitur vs Framework
Source: Gemini Nano Banana Pro - screaming architecture

Screaming Architecture adalah sebuah arsitektur di mana struktur folder dan struktur package β€œmengaumkan” domain beserta fitur utama bisnis tersebut🦁, bukan tentang teknologi yang dipakai. Konsepnya sederhana tapi argumennya cukup kuat. Misalkan kita membuka struktur folder aplikasi e-commerce, yang harusnya kita lihat bukanlah folder terkait teknologi yang dipakai e-commerce, melainkan folder terkait bisnis e-commerce. Analoginya seperti kita melihat brosur Hotel hal pertama yang kita perhatikan adalah Lobby, Kamar, Restoran, Gym, Kolam, dan sejenisnya. Kita langsung paham fasilitas dari Hotel tersebut. Kalau yang kita lihat pertama kali adalah barang bakunya seperti Besi, Kaca, Batu Bata, Paku, Kayu, dan struktur bangunan lainnya, maka kita akan bingung ini fasilitasnya apa ajaπŸ˜•.

Pelanggaran Screaming Architecture

Misalnya strukturnya seperti ini:

Copy
src/
β”œβ”€β”€ controllers/
β”‚   β”œβ”€β”€ OrderCreationController.java
β”‚   β”œβ”€β”€ OrderDetailController.java
β”‚   β”œβ”€β”€ UserCreationController.java
β”‚   └── UserDetailController.java
β”œβ”€β”€ entities/
β”‚   β”œβ”€β”€ OrderEntity.java
β”‚   └── UserEntity.java
β”œβ”€β”€ repositories/
β”‚   β”œβ”€β”€ OrderRepository.java
β”‚   └── UserRepository.java
β”œβ”€β”€ requests/
β”‚   β”œβ”€β”€ OrderCreationRequest.java
β”‚   β”œβ”€β”€ OrderDetailRequest.java
β”‚   β”œβ”€β”€ UserCreationRequest.java
β”‚   └── UserDetailRequest.java
β”œβ”€β”€ responses/
β”‚   β”œβ”€β”€ OrderCreationResponse.java
β”‚   β”œβ”€β”€ OrderDetailResponse.java
β”‚   β”œβ”€β”€ UserCreationResponse.java
β”‚   └── UserDetailResponse.java
└── usecases/
    β”œβ”€β”€ OrderCreationUseCase.java
    β”œβ”€β”€ OrderDetailUseCase.java
    β”œβ”€β”€ UserCreationUseCase.java
    └── UserDetailUseCase.java

Folder teratas yang kita lihat adalah controllers, entities, usecases, repositories, dan sejenisnya. Ini ga mencerminkan domain & fitur dari aplikasi. Selain itu saat ada perubahan fitur, misalnya terkait user, maka kita perlu pindah-pindah folder dari controllers, entities, usecases, repositories, dan sebagainya. Ketika fiturnya makin banyak, jumlah file di dalam satu folder akan membludak😱.

Solusi Screaming Architecture

Dengan Screaming Architecture pendekatan di atas diubah jadi seperti berikut:

Copy
src/
β”œβ”€β”€ order/
β”‚   β”œβ”€β”€ creation/
β”‚   β”‚   β”œβ”€β”€ OrderCreationController.java
β”‚   β”‚   β”œβ”€β”€ OrderCreationRequest.java
β”‚   β”‚   β”œβ”€β”€ OrderCreationResponse.java
β”‚   β”‚   └── OrderCreationUseCase.java
β”‚   β”œβ”€β”€ detail/
β”‚   β”‚   β”œβ”€β”€ OrderDetailController.java
β”‚   β”‚   β”œβ”€β”€ OrderDetailRequest.java
β”‚   β”‚   β”œβ”€β”€ OrderDetailResponse.java
β”‚   β”‚   └── OrderDetailUseCase.java
β”‚   β”œβ”€β”€ OrderEntity.java
β”‚   └── OrderRepository.java
└── user/
    β”œβ”€β”€ creation/
    β”‚   β”œβ”€β”€ UserCreationController.java
    β”‚   β”œβ”€β”€ UserCreationRequest.java
    β”‚   β”œβ”€β”€ UserCreationResponse.java
    β”‚   └── UserCreationUseCase.java
    β”œβ”€β”€ detail/
    β”‚   β”œβ”€β”€ UserDetailController.java
    β”‚   β”œβ”€β”€ UserDetailRequest.java
    β”‚   β”œβ”€β”€ UserDetailResponse.java
    β”‚   └── UserDetailUseCase.java
    β”œβ”€β”€ UserEntity.java
    └── UserRepository.java

Sekarang kita pecah per fitur. Dengan begini saat pertama kali buka struktur foldernya dari atas, kita langsung tahu domain beserta fitur-fiturnya apa aja. Di saat kita ingin melakukan perubahan fitur, kita langsung ke folder fitur tersebut. Ga perlu bolak-balik pindah-pindah folder ke berbagai penjuru. Strukturnya pun lebih rapi sesuai domain dan fiturπŸ‘. Controller dan Use Case kita simpan per fitur. Misalkan suatu saat ada varian baru dari fitur yang sudah ada kita bisa simpan di folder fitur yang sama. Untuk objek Entity Database dan Repository memang disimpan bukan per fitur karena keduanya biasanya dibuat per tabel. Kalaupun ada varian database baru, tetap saja disimpannya per tabel atau per collection. Teknologi di sini hanyalah pemeran pembantu, bukan pemeran utama dari aplikasi. Kalau ke depannya struktur foldernya semakin membludak maka itu pertanda modul ini scopenya sudah terlalu besar dan perlu dipertimbangkan untuk dipecah. Ketika ingin dipecah ke Microservices jadi lebih gampang karena domainnya sudah kita pisah-pisah😎.

Β© 2026 Β· Ferry Suhandri