Co to jest diagram kodu C4?
Diagram kodu toPoziom 4— najgłębszy, najszczegółowiejszy poziom w modelu C4 Simona Brown.

Pokazuje:
-
Klasy, interfejsy, wyliczenia, rejestracje, lub inne konstrukcje poziomu kodu, które implementują określonykomponent (z poziomu 3).
-
Związki między tymi klasami (dziedziczenie, kompozycja, zależność, realizacja interfejsów itp.).
-
Kluczoweelementy projektowe takie jak wzorce stosowane wewnątrz komponentu (np. repozytoria, usługi, DTO, encje domeny, fabryki).
W praktyce ten poziom to niemal zawszediagram klas UML (lub uproszczona wersja), skupiona na jednym (lub bardzo małej liczbie) komponentach.
Ważna wyjaśnienie:
-
Poziom 4 tonie nie dotyczy całego kodu źródłowego.
-
Nie jestniewymagane do pokazania każdej klasy.
-
Mapuje tylko istotną strukturępotrzebną do zrozumienia, jak faktycznie budowana jest złożona lub krytyczna część.
-
Oficjalna rekomendacja C4: idealnie generowana automatyczniez kodu źródłowego (przez narzędzia takie jak Doxygen, Javadoc + wtyczki UML, yWorks, Structurizr, CodeSee itp.) zamiast rysowana ręcznie.
Kiedy tworzyć diagram kodu
Twórz diagramy poziomu 4 oszczędnie — tylko w tych sytuacjach:
-
Składnik jest bardzo złożony, krytyczny dla misji, lub trudny do zrozumieniaz samego kodu źródłowego (np. skomplikowana logika domeny, intensywne wykorzystanie wzorców projektowych, przepływy kryptograficzne, maszyny stanów, kod dziedziczony pełen długu technicznego).
-
Pracujesz w bardzo regulowanym sektorze (finanse, medycyna, lotnictwo, obrona), gdzie audytorzy lub zespoły zgodności wymagają jasnego odwzorowania architektura → projekt → implementacja.
-
W trakcie dużego przekształcenia, przytłaczania składnika dziedziczonego, lub wprowadzania nowego wzorca architektonicznego (heksagonalny, czysty, pionowy przekrój, agregaty DDD) — widoki przed/po pomagają przekazać zmianę.
-
Wprowadzanie starszych programistów lub architektówktórzy muszą szybko zrozumieć nieoczywistą wewnętrzną strukturę krytycznego pod kątem ryzyka fragmentu kodu.
-
Już zainwestowałeś w automatyczne generowanienarzędzia — więc utrzymanie poziomu 4 kosztuje niemal nic.
-
Zespół zgodził się, że „żywa dokumentacja”na poziomie klasy jest wartościowa dla tego konkretnego podsystemu.
Nie twórz diagramów poziomu 4, gdy:
-
Struktura składników jest oczywista dzięki dobremu nazewnictwu, małej wielkości lub czystemu kodowi (większość nowoczesnych mikroserwisów mieści się w tej kategorii).
-
Masz już dobrze napisane testy jednostkowe/integracyjne, jasne interfejsy, oraz objaśniające komentarze.
-
Większość zespołu łatwo porusza się po kodzie.
-
Koszty utrzymania przewyższają korzyści (ręcznie rysowane diagramy klas bardzo szybko się wygryzają).
Simon Brown i większość praktyków podkreśla: Większość zespołów nigdy nie potrzebuje poziomu 4. Poziomy 1 i 2zaspokajają 80–90% potrzeb komunikacji; Poziom 3zajmuje się większością pozostałych przypadków. Poziom 4 to wyjątek, a nie reguła.
Dlaczego używać diagramów kodu? (Gdy przynoszą wartość)
-
Łączy architekturę ↔ realizację — Pokazuje, jak komponenty najwyższego poziomu są faktycznie zrealizowane w kodzie.
-
Ujednolica skomplikowaną wewnętrzną architekturę — Wskazuje na wykorzystanie wzorców (Strategia, Fabryka, Dekorator, Repozytorium), naruszenia warstw, silne powiązania lub sprytne modelowanie domeny.
-
Wsparcie audytów i zgodności — Pokazuje, że decyzje architektoniczne są realizowane w kodzie.
-
Wsparcie dyskusji nad refaktoryzacją i migracją — Struktury klas przed i po ułatwiają zrozumienie propozycji.
-
Zmniejsz „wiedzę plemienną” — Pomaga nowym seniorom szybciej zrozumieć trudne fragmenty niż czytanie wszystkich plików źródłowych.
-
Wersje generowane automatycznie stają się „żywymi dokumentami” — Jeśli narzędzia są w miejscu, pozostają dokładne praktycznie bez wysiłku.
Jak stworzyć świetny diagram kodu (krok po kroku + najlepsze praktyki)
-
Wybierz JEDEN komponent — Zazwyczaj z diagramu poziomu 3, gdzie złożoność wewnętrzna uzasadnia powiększenie.
-
Zdecyduj: rysowany ręcznie czy generowany?
-
Rysowany ręcznie → tylko do warsztatów, propozycji lub obszarów zbyt chaotycznych dla narzędzi automatycznych.
-
Generowany → zalecane (PlantUML można nadal użyć do stylizacji/ dopasowania wyjścia).
-
-
Skup się na istotnych elementach — Pokaż:
-
Kluczowe klasy i interfejsy
-
Ważne relacje (→ zależność, — kompozycja, <| realizacja, ^ dziedziczenie)
-
Agregaty, encje, obiekty wartości (styl DDD)
-
Krytyczne wzorce lub antywzorce, które chcesz wyróżnić
-
-
Zachowaj mały rozmiar — Maksymalnie 8–15 klas. Jeśli większy → podziel na skupione diagramy (np. „kawałek uwierzytelniania”, „encje przetwarzania zamówień”).
-
Najlepsze praktyki
-
Zalecaj generowanie automatyczne gdy to możliwe (mniejsza utrata aktualności).
-
Używaj składni PlantUML classDiagram — czytelna i wersjonowalna.
-
Dodaj notatki dla nieoczywistych decyzji (np. „Używa anemicznego modelu domeny – zaplanowana refaktoryzacja”).
-
Unikaj pokazywania wszystkiego — pomijaj trywialne gettery/settery, klasy pomocnicze.
-
Przechowuj w repozytorium → traktuj jako kod (zatwierdzaj pliki .puml obok komponentu).
-
Używaj oszczędnie — jeden na złożony komponent, nie na każdy mikroserwis.
-
Połącz z dynamiczne widoki (sekwencja/współpraca), jeśli przepływ w czasie wykonywania jest ważniejszy niż struktura statyczna.
-
Przykład PlantUML – Komponent uwierzytelniania (rozszerzenie stylu Big Bank plc)
Oto realistyczny przykład poziomu 4, przybliżający Komponent zabezpieczeń / uwierzytelniania z wcześniejszych diagramów aplikacji API.
@startuml
tytuł C4 Poziom 4 – Diagram kodu: Uwierzytelnianie w aplikacji API
skinparam monochrome true
skinparam shadowing false
skinparam class {
BackgroundColor White
BorderColor Black
ArrowColor Black
}
abstrakcyjna klasa 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
}
interfejs 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>
}
' Relacje
JwtAuthenticationProvider -up-> JwtTokenProvider : używa
JwtAuthenticationProvider -up-> UserDetailsService : używa
DatabaseUserDetailsService .up.|> UserDetailsService
DatabaseUserDetailsService --> UserRepository : używa
UserRepository --> User : zwraca
JwtAuthenticationToken .up.|> Authentication
note right of JwtAuthenticationProvider
Podstawowy przepływ uwierzytelniania dla sesji bezstanowych opartych na JWT
end note
note bottom of JwtTokenProvider
Podpisuje i weryfikuje JWT przy użyciu HS512
end note
@enduml
Ten mały diagram:
-
Skupia się wyłącznie na wewnętrznych aspektach uwierzytelniania
-
Pokazuje kluczowe klasy, interfejsy i zależności
-
Wyróżnia wzorce (dostawca, repozytorium)
-
Używa notatek do dostarczania kontekstu
Wklej do dowolnego renderera PlantUML — dostosuj do swojego domeny (np. zastąp JWT przez OAuth2, dodaj klasy MFA itp.).
Przypomnienie podsumowujące: Poziom 4 jest potężny, ale rzadki. Używaj go świadomie, preferuj generowanie automatyczne i nigdy nie pozwól, by stało się to zbędną pracą. Największą wartość w C4 dają poziomy 1–3. Szczęśliwego (wybieranego) modelowania!
Zasób
- Ostateczny przewodnik po wizualizacji modelu C4 przy użyciu narzędzi AI firmy Visual Paradigm: Ten przewodnik wyjaśnia, jak wykorzystać narzędzia wspierane przez sztuczną inteligencję, aby zautomatyzować i ulepszyć wizualizację modelu C4, co przyspiesza projektowanie architektury oprogramowania.
- Wykorzystanie AI Studio C4 firmy Visual Paradigm do uproszczonej dokumentacji architektury: Ten artykuł szczegółowo opisuje wykorzystanie stacji zwiększonych o AI do tworzenia czystej, skalowalnej i utrzymywalnej dokumentacji architektury oprogramowania.
- Najlepszy przewodnik po C4-PlantUML Studio: rewolucja w projektowaniu architektury oprogramowania: Ten zasób bada łączenie automatyzacji opartej na AI, przejrzystości modelu C4 oraz elastyczności PlantUML w jednym potężnym narzędziu.
- Kompletny przewodnik po C4 PlantUML Studio z funkcjonalnością AI firmy Visual Paradigm: Ten przewodnik opisuje narzędzie specjalnie stworzone, które zostało wydane na przełomie 2025 roku i przekształca polecenia w języku naturalnym w złożone diagramy C4.
- C4-PlantUML Studio | Generator diagramów C4 z funkcjonalnością AI: Ten przegląd funkcji podkreśla narzędzie oparte na AI, które ma na celu generowanie diagramów architektury oprogramowania C4 na podstawie prostych opisów tekstowych.
- Generowanie i modyfikowanie diagramów komponentów C4 za pomocą czatobota AI firmy Visual Paradigm: Ten samouczek pokazuje, jak używać czatobota z funkcjonalnością AI do iteracyjnego tworzenia i doskonalenia architektury poziomu komponentów dla złożonych systemów.
- Generator diagramów C4 z funkcjonalnością AI: podstawowe poziomy i wspierające widoki: Ta strona wyjaśnia, jak generator AI wspiera cztery podstawowe poziomy modelu C4 — Kontekst, Kontener, Komponent i Wdrożenie — w celu zapewnienia kompleksowej dokumentacji.
- Generator diagramów z funkcjonalnością AI: wydanie z pełną obsługą modelu C4: Ten aktualizacja szczegółowo opisuje zintegrowane funkcje oparte na AI, które umożliwiają automatyczne tworzenie hierarchicznych diagramów modelu C4.
- Generator modelu C4 z funkcjonalnością AI: automatyzacja pełnego cyklu modelowania: Ten zasób podkreśla, jak specjalistyczny czatobot AI wykorzystuje przekazywanie rozmów, aby zapewnić spójność dokumentacji architektury dla zespołów DevOps.
- Kompleksowa analiza: ogólnoustrojowe czatoboty AI w porównaniu z narzędziami C4 firmy Visual Paradigm: Porównanie to wyjaśnia, dlaczego specjalistyczne narzędzia, takie jak C4 PlantUML Studio, zapewniają bardziej zorganizowane i profesjonalne wyniki niż ogólnoustrojowe modele językowe.
Ten post dostępny jest również w Deutsch, English, Español, فارسی, Français, English, Bahasa Indonesia, 日本語, Portuguese, Ру́сский, Việt Nam, 简体中文 and 繁體中文













