Что такое диаграмма кода C4?
Диаграмма кода — этоУровень 4— самый глубокий и детализированный уровень в модели C4 Саймона Брауна.

Он показывает:
-
Классы, интерфейсы, перечисления, записи, или другие конструкции на уровне кода, реализующие конкретныйкомпонент (с уровня 3).
-
Связи между этими классами (наследование, композиция, зависимость, реализация интерфейсов и т.д.).
-
Ключевыеэлементы проектирования такие как шаблоны, применяемые внутри компонента (например, репозитории, сервисы, DTO, доменные сущности, фабрики).
На практике этот уровень почти всегда являетсядиаграммой классов UML (или упрощённой версией), ориентированной на один (или очень мало) компонентов.
Важное уточнение:
-
Уровень 4 — этоне не о всей кодовой базе.
-
Онненеобходимо показывать каждый класс.
-
Он отображаеттолько основную структурунеобходимую для понимания того, как на самом деле построен сложный или критически важный компонент.
-
Официальная рекомендация C4:желательно автоматически генерируемаяиз исходного кода (с помощью инструментов, таких как Doxygen, Javadoc + плагины UML, yWorks, Structurizr, CodeSee и др.), а не вручную нарисованная.
Когда создавать диаграмму кода
Создавайте диаграммы уровня 4 сдержанно — только в этих случаях:
-
Компонент являетсявысоко сложным, критически важным, илисложным для пониманияисключительно из исходного кода (например, сложная логика домена, интенсивное использование паттернов проектирования, криптографические потоки, машины состояний, устаревший код, исполненный техническим долгом).
-
Вы работаете ввысоко регулируемой отрасли (финансы, здравоохранение, аэрокосмическая промышленность, оборона), где аудиторы или команды соответствия требуют явного отображения архитектуры → проектирования → реализации.
-
Во времякрупной рефакторинговой работы, постепенного устранения устаревшего компонента, иливведения нового архитектурного паттерна (гексагональный, чистый, вертикальная секция, агрегаты DDD) — до/после-виды помогают передать изменения.
-
Ознакомлениестарших разработчиковилиархитекторовкоторые должны быстро понять неочевидную внутреннюю структуру кода с высоким риском.
-
Вы уже вложили средства вавтоматическая генерацияинструменты — поэтому поддержка уровня 4 почти не стоит ничего.
-
Команда согласилась, что«живая документация»на уровне классов имеет значение для этой конкретной подсистемы.
НЕ создавайте диаграммы уровня 4, когда:
-
Структура компонентов очевидна благодаря хорошему именованию, небольшому размеру или чистому коду (большинство современных микросервисов попадают сюда).
-
У вас уже естьхорошие юнит-тесты/тесты интеграции, четкие интерфейсы, иобъяснительные комментарии.
-
Большинство команды легко ориентируются в коде.
-
Стоимость поддержки превышает выгоду (рукописные диаграммы классов быстро устаревают).
Саймон Браун и большинство практиков подчеркивают:Большинство команд никогда не нуждаются в уровне 4. Уровни 1 + 2покрывают 80–90% потребностей в коммуникации;Уровень 3обращается со значительной частью оставшегося. Уровень 4 — исключение, а не правило.
Зачем использовать диаграммы кода? (Когда они приносят пользу)
-
Мост между архитектурой ↔ реализацией— Показывает, как высокий уровень компонентов на самом деле реализован в коде.
-
Уточнить сложную внутреннюю архитектуру— Выявляет использование паттернов (Стратегия, Фабрика, Декоратор, Репозиторий), нарушения слоистости, тесную связь или изящное моделирование домена.
-
Поддержка аудитов и соответствия — Показывает, что архитектурные решения реализуются на уровне кода.
-
Содействие обсуждениям по рефакторингу и миграции — Структуры классов до и после делают предложения осязаемыми.
-
Снижение «племенной знания» — Помогает новым старшим сотрудникам быстрее понять сложные части, чем чтение всех исходных файлов.
-
Автоматически генерируемые версии становятся «живой документацией» — Если инструменты на месте, они остаются точными почти без усилий.
Как создать отличную диаграмму кода (пошагово + лучшие практики)
-
Выберите ОДИН компонент — Обычно из диаграммы уровня 3, где внутренняя сложность оправдывает увеличение.
-
Определите: ручная или автоматическая генерация?
-
Ручная → только для рабочих встреч, предложений или участков, слишком запутанных для автоматических инструментов.
-
Автоматическая → предпочтительна (PlantUML по-прежнему можно использовать для стилизации/настройки вывода).
-
-
Сосредоточьтесь на основном — Покажите:
-
Ключевые классы/интерфейсы
-
Важные отношения (→ зависимость, — композиция, <| реализация, ^ наследование)
-
Агрегаты, сущности, объекты значений (по стилю DDD)
-
Критические паттерны или антипаттерны, которые вы хотите выделить
-
-
Держите его маленьким — Максимум 8–15 классов. Если больше → разбейте на узконаправленные диаграммы (например, «фрагмент аутентификации», «сущности обработки заказов»).
-
Лучшие практики
-
Предпочитайте автоматическую генерацию всегда, когда возможно (меньше устаревания).
-
Используйте синтаксис PlantUML classDiagram — чистый и версионируемый.
-
Добавьте примечаниядля неочевидных решений (например, «Использует анемичную модель домена — запланированная рефакторизация»).
-
Избегайте отображениявсего— опускайте тривиальные геттеры/сеттеры, вспомогательные классы.
-
Храните в репозитории → рассматривайте как код (сдавайте файлы .puml рядом с компонентом).
-
Используйте умеренно — один на сложный компонент, а не на каждый микросервис.
-
Объединяйте сдинамическими видами (последовательность/сотрудничество), если поток во время выполнения важнее статической структуры.
-
Пример PlantUML — Компонент аутентификации (расширение стиля Big Bank plc)
Вот реальный пример уровня 4, фокусирующийся наКомпонент безопасности / аутентификации из ранее представленных диаграмм API-приложения.
@startuml
title C4 Уровень 4 – Диаграмма кода: Аутентификация внутри API-приложения
skinparam monochrome true
skinparam shadowing false
skinparam class {
BackgroundColor White
BorderColor Black
ArrowColor Black
}
абстрактный класс 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
}
интерфейс 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>
}
' Связи
JwtAuthenticationProvider -up-> JwtTokenProvider : использует
JwtAuthenticationProvider -up-> UserDetailsService : использует
DatabaseUserDetailsService .up.|> UserDetailsService
DatabaseUserDetailsService --> UserRepository : использует
UserRepository --> User : возвращает
JwtAuthenticationToken .up.|> Authentication
note right of JwtAuthenticationProvider
Основной поток аутентификации для сессий на основе JWT без состояния
end note
note bottom of JwtTokenProvider
Подписывает и проверяет JWT с использованием HS512
end note
@enduml
Эта небольшая диаграмма:
-
Фокусируется исключительно на внутренних аспектах аутентификации
-
Показывает ключевые классы, интерфейсы и зависимости
-
Выделяет шаблоны (провайдер, репозиторий)
-
Использует примечания для контекста
Вставьте в любой рендерер PlantUML — настройте под вашу предметную область (например, замените JWT на OAuth2, добавьте классы MFA и т.д.).
Напоминание по итогам: Уровень 4 мощный, норедкий. Используйте его осознанно, отдавайте предпочтение автоматической генерации, и никогда не позволяйте ему превращаться в пустую работу. Большая часть ценности C4 исходит из уровней 1–3. Удачного (выборочного) моделирования!
Ресурс
- Полное руководство по визуализации модели C4 с использованием инструментов AI Visual Paradigm: Это руководство объясняет, как использовать инструменты, основанные на ИИ, для автоматизации и улучшения визуализации модели C4, чтобы ускорить проектирование архитектуры программного обеспечения.
- Использование AI C4 Studio Visual Paradigm для упрощения документирования архитектуры: В этой статье описывается использование студии с поддержкой ИИ для создания чистой, масштабируемой и поддерживаемой документации по архитектуре программного обеспечения.
- Крайняя инструкция по C4-PlantUML Studio: революция в проектировании архитектуры программного обеспечения: Этот ресурс исследует объединение автоматизации, управляемой ИИ, ясности модели C4 и гибкости PlantUML в одном мощном инструменте.
- Полное руководство по C4 PlantUML Studio с ИИ от Visual Paradigm: Это руководство описывает специально разработанный инструмент, выпущенный в конце 2025 года, который преобразует запросы на естественном языке в многослойные диаграммы C4.
- C4-PlantUML Studio | Генератор диаграмм C4 с ИИ: Этот обзор функций подчеркивает инструмент, управляемый ИИ, предназначенный для генерации диаграмм архитектуры программного обеспечения C4 на основе простых текстовых описаний.
- Генерация и изменение диаграмм компонентов C4 с помощью чат-бота Visual Paradigm с ИИ: Этот учебник демонстрирует использование чат-бота с ИИ для итеративного создания и улучшения архитектуры на уровне компонентов сложных систем.
- Генератор диаграмм C4 с ИИ: основные уровни и вспомогательные виды: На этой странице объясняется, как генератор с ИИ поддерживает четыре основных уровня модели C4 — Контекст, Контейнер, Компонент и Развертывание — для обеспечения полной документации.
- Генератор диаграмм с ИИ: релиз с полной поддержкой модели C4: В этом обновлении подробно описывается интеграция функций с ИИ для автоматического создания иерархических диаграмм модели C4.
- Генератор модели C4 с ИИ: автоматизация полного жизненного цикла моделирования: Этот ресурс подчеркивает, как специализированный чат-бот с ИИ использует диалоговые запросы для обеспечения согласованности в документации по архитектуре для команд DevOps.
- Полный обзор: общие чат-боты с ИИ против инструментов C4 от Visual Paradigm: Это сравнение объясняет, почему специализированные инструменты, такие как C4 PlantUML Studio, обеспечивают более структурированные и профессионального уровня результаты по сравнению с универсальными языковыми моделями.
Эта статья также доступна на Deutsch, English, Español, فارسی, Français, English, Bahasa Indonesia, 日本語, Polski, Portuguese, Việt Nam, 简体中文 and 繁體中文













