Apa itu Diagram Kode C4?
Diagram Kode adalahTingkat 4— tingkat paling dalam dan paling rinci dalam model C4 Simon Brown.

Menunjukkan:
-
Kelas, antarmuka, enum, rekam, atau konstruksi tingkat kode lainnya yang menerapkan komponen tertentukomponen (dari Tingkat 3).
-
Hubungan antara kelas-kelas tersebut (pewarisan, komposisi, ketergantungan, realisasi antarmuka, dll).
-
Elemen desain utamaelemen desain seperti pola yang diterapkan di dalam komponen (misalnya, penyimpanan, layanan, DTO, entitas domain, pabrik).
Dalam praktiknya, tingkat ini hampir selalu merupakandiagram kelas UML (atau varian yang disederhanakan) yang berfokus pada satu (atau sangat sedikit) komponen.
Penjelasan penting:
-
Tingkat 4 adalahbukan tentang seluruh kode sumber.
-
Ini adalahbukandiperlukan untuk menampilkan setiap kelas.
-
Ini memetakan hanya struktur yang esensialyang dibutuhkan untuk memahami bagaimana komponen yang kompleks atau kritis sebenarnya dibangun.
-
Rekomendasi resmi C4: idealnya dihasilkan secara otomatisdari kode sumber (melalui alat seperti Doxygen, Javadoc + plugin UML, yWorks, Structurizr, CodeSee, dll.) daripada digambar secara manual.
Kapan Membuat Diagram Kode
Buat diagram Level 4 secara hemat — hanya dalam situasi-situasi berikut:
-
Komponen ini adalah sangat kompleks, kritis bagi misi, atau sulit dipahamihanya dari kode sumber saja (misalnya, logika domain yang rumit, penggunaan berat pola desain, aliran kriptografi, mesin keadaan, kode lama yang penuh dengan utang teknis).
-
Anda sedang bekerja di bidang industri yang sangat diatur (keuangan, kesehatan, kedirgantaraan, pertahanan) di mana auditor atau tim kepatuhan menuntut pemetaan eksplisit dari arsitektur → desain → implementasi.
-
Selama refaktor besar, menghambat komponen lama, atau memperkenalkan pola arsitektur baru (hexagonal, bersih, potongan vertikal, agregat DDD) — tampilan sebelum/sesudah membantu menyampaikan perubahan tersebut.
-
Onboarding pengembang senior atau arsitek yang perlu memahami dengan cepat struktur internal yang tidak jelas dari suatu kode berisiko tinggi.
-
Anda telah menginvestasikan pada generasi otomatis alat bantu — sehingga pemeliharaan Level 4 hampir tidak membutuhkan biaya.
-
Tim telah sepakat bahwa “dokumentasi hidup” pada tingkat kelas sangat berharga untuk subsistem khusus ini.
Jangan membuat diagram Level 4 ketika:
-
Struktur komponen jelas dari penamaan yang baik, ukuran kecil, atau kode bersih (kebanyakan mikroservis modern termasuk di sini).
-
Anda sudah memiliki uji unit/integrasi yang baik, antarmuka yang jelas, dan komentar penjelas.
-
Sebagian besar tim dapat menavigasi kode dengan mudah.
-
Biaya pemeliharaan melebihi manfaatnya (diagram kelas yang digambar tangan menjadi usang sangat cepat).
Simon Brown dan kebanyakan praktisi menekankan: Kebanyakan tim tidak pernah membutuhkan Level 4. Level 1 + 2 menutupi 80–90% kebutuhan komunikasi; Level 3 menangani sebagian besar sisanya. Level 4 adalah pengecualian, bukan aturan.
Mengapa Menggunakan Diagram Kode? (Ketika Mereka Menambah Nilai)
-
Jembatani arsitektur ↔ implementasi — Menunjukkan bagaimana komponen tingkat tinggi sebenarnya direalisasikan dalam kode.
-
Perjelas desain internal yang kompleks — Mengungkap penggunaan pola (Strategy, Factory, Decorator, Repository), pelanggaran lapisan, keterikatan erat, atau pemodelan domain yang cermat.
-
Dukung audit & kepatuhan — Menunjukkan bahwa keputusan arsitektur diimplementasikan hingga ke kode.
-
Mendukung diskusi refactoring & migrasi — Struktur kelas sebelum/sesudah membuat proposal menjadi nyata.
-
Kurangi ‘pengetahuan suku’ — Membantu rekrutan senior baru memahami bagian-bagian yang kompleks lebih cepat daripada membaca semua file sumber.
-
Versi yang dihasilkan otomatis menjadi ‘dokumen hidup’ — Jika alat sudah tersedia, mereka tetap akurat dengan usaha hampir nol.
Cara Membuat Diagram Kode yang Hebat (Langkah demi Langkah + Praktik Terbaik)
-
Pilih SATU komponen — Biasanya dari diagram Level 3 di mana kompleksitas internal membenarkan pembesaran.
-
Putuskan: digambar tangan atau dihasilkan otomatis?
-
Digambar tangan → hanya untuk lokakarya, proposal, atau area yang terlalu kacau untuk alat otomatis.
-
Dihasilkan otomatis → disukai (PlantUML masih bisa digunakan untuk menata/gaya output).
-
-
Fokus pada hal-hal penting — Tunjukkan:
-
Kelas/antarmuka utama
-
Hubungan penting (→ ketergantungan, — komposisi, <| realisasi, ^ warisan)
-
Agregat, entitas, objek nilai (gaya DDD)
-
Pola kritis atau anti-pola yang ingin Anda soroti
-
-
Jaga agar tetap kecil — Maksimal 8–15 kelas. Jika lebih besar → bagi menjadi diagram fokus (misalnya, ‘potongan Autentikasi’, ‘entitas pemrosesan pesanan’).
-
Praktik Terbaik
-
Lebih baik pilih generasi otomatis kapan pun memungkinkan (lebih sedikit usang).
-
Gunakan sintaks PlantUML classDiagram sintaks — bersih dan dapat dikelola versinya.
-
Tambahkan catatanuntuk keputusan yang tidak jelas (misalnya, “Menggunakan Model Domain Anemik – direncanakan refaktor”).
-
Hindari menampilkan semuanya— abaikan getter/setter biasa, kelas utilitas.
-
Simpan di repo → perlakukan sebagai kode (komit file .puml di dekat komponen).
-
Gunakan secara bijak — satu per komponen kompleks, bukan per mikroservis.
-
Gabungkan dengan tampilan dinamis (sequence/kolaborasi) jika alur saat runtime lebih penting daripada struktur statis.
-
Contoh PlantUML – Komponen Autentikasi (perluasan gaya Big Bank plc)
Berikut adalah contoh Level 4 yang realistis yang memperbesar bagian Komponen Keamanan / Autentikasi dari diagram Aplikasi API sebelumnya.
@startuml
title C4 Level 4 – Diagram Kode: Autentikasi di Dalam Aplikasi API
skinparam monochrome true
skinparam shadowing false
skinparam class {
BackgroundColor White
BorderColor Black
ArrowColor Black
}
abstract class AuthenticationProvider {
+ authenticate(credentials): Authentication
}
class JwtAuthenticationProvider {
- tokenProvider: JwtTokenProvider
- userDetailsService: UserDetailsService
+ authenticate(credentials): Authentication
}
class JwtTokenProvider {
- secretKey: String
- validityInMilliseconds: long
+ generateToken(userDetails): String
+ validateToken(token): boolean
+ getUsernameFromToken(token): String
}
interface UserDetailsService {
+ loadUserByUsername(username): UserDetails
}
class DatabaseUserDetailsService {
- userRepository: UserRepository
+ loadUserByUsername(username): UserDetails
}
class UserRepository {
+ findByUsername(username): Optional<User>
}
class User {
- username: String
- passwordHash: String
- roles: Set<Role>
}
class JwtAuthenticationToken << (T,orchid) Authentication >> {
- principal: UserDetails
- credentials: Object
- authorities: Collection<GrantedAuthority>
}
' Hubungan
JwtAuthenticationProvider -up-> JwtTokenProvider : menggunakan
JwtAuthenticationProvider -up-> UserDetailsService : menggunakan
DatabaseUserDetailsService .up.|> UserDetailsService
DatabaseUserDetailsService --> UserRepository : menggunakan
UserRepository --> User : mengembalikan
JwtAuthenticationToken .up.|> Authentication
note right of JwtAuthenticationProvider
Alur autentikasi utama untuk sesi tanpa status berbasis JWT
end note
note bottom of JwtTokenProvider
Menandatangani & memverifikasi JWT menggunakan HS512
end note
@enduml
Diagram kecil ini:
-
Hanya berfokus pada bagian dalam autentikasi
-
Menampilkan kelas kunci, antarmuka, dan ketergantungan
-
Menyoroti pola (penyedia, penyimpanan)
-
Menggunakan catatan untuk konteks
Tempelkan ke renderer PlantUML apa pun — sesuaikan untuk domain Anda (misalnya, ganti JWT dengan OAuth2, tambahkan kelas MFA, dll.).
Pengingat ringkasan: Level 4 sangat kuat tetapi langka. Gunakan secara sengaja, lebih pilih otomatisasi, dan jangan biarkan menjadi pekerjaan membosankan. Sebagian besar nilai C4 berasal dari Level 1–3. Selamat (pemodelan selektif)!
Sumber Daya
- Panduan Utama untuk Visualisasi Model C4 Menggunakan Alat AI Visual Paradigm: Panduan ini menjelaskan cara memanfaatkan alat berbasis AI untuk mengotomatisasi dan meningkatkan visualisasi model C4 agar desain arsitektur perangkat lunak menjadi lebih cepat.
- Memanfaatkan Studio C4 AI Visual Paradigm untuk Dokumentasi Arsitektur yang Lebih Efisien: Artikel ini menjelaskan penggunaan studio yang ditingkatkan AI untuk membuat dokumentasi arsitektur perangkat lunak yang bersih, dapat diskalakan, dan mudah dipelihara.
- Panduan Lengkap tentang C4-PlantUML Studio: Mengubah Desain Arsitektur Perangkat Lunak: Sumber ini mengeksplorasi penggabungan otomatisasi berbasis AI, kejelasan model C4, dan fleksibilitas PlantUML menjadi satu alat yang kuat.
- Panduan Lengkap tentang C4 PlantUML Studio Berbasis AI dari Visual Paradigm: Panduan ini menjelaskan alat khusus yang dirilis pada akhir 2025 yang mengubah permintaan bahasa alami menjadi diagram C4 berlapis.
- C4-PlantUML Studio | Pembuat Diagram C4 Berbasis AI: Ringkasan fitur ini menyoroti alat berbasis AI yang dirancang untuk menghasilkan diagram arsitektur perangkat lunak C4 dari deskripsi teks sederhana.
- Menghasilkan dan Memodifikasi Diagram Komponen C4 dengan Chatbot AI Visual Paradigm: Tutorial ini menunjukkan penggunaan chatbot berbasis AI untuk secara iteratif membuat dan menyempurnakan arsitektur tingkat komponen pada sistem yang kompleks.
- Pembuat Diagram C4 Berbasis AI: Tingkat Inti dan Tampilan Pendukung: Halaman ini menjelaskan bagaimana pembuat AI mendukung empat tingkat inti model C4—Konteks, Wadah, Komponen, dan Penempatan—untuk memberikan dokumentasi yang komprehensif.
- Pembuat Diagram Berbasis AI: Rilis Dukungan Model C4 Lengkap: Pembaruan ini menjelaskan integrasi fitur berbasis AI untuk pembuatan otomatis diagram model C4 berhirarki.
- Pembuat AI Model C4: Mengotomatisasi Seluruh Siklus Pemodelan: Sumber ini menyoroti bagaimana chatbot AI khusus menggunakan permintaan percakapan untuk memastikan konsistensi di seluruh dokumentasi arsitektur bagi tim DevOps.
- Ulasan Komprehensif: Chatbot AI Umum vs. Alat C4 dari Visual Paradigm: Perbandingan ini menjelaskan mengapa alat khusus seperti C4 PlantUML Studio memberikan hasil yang lebih terstruktur dan berkualitas profesional dibandingkan model bahasa umum.
This post is also available in Deutsch, English, Español, فارسی, Français, English, 日本語, Polski, Portuguese, Ру́сский, Việt Nam, 简体中文 and 繁體中文.













