Cos'e il Modello C4? Una Guida Completa per i Team Software - Archyl Blog

Il modello C4 e il framework piu pratico per visualizzare l'architettura software. Questa guida completa copre tutti e quattro i livelli, quando usare ciascuno, esempi concreti e come i team moderni implementano il C4 con strumenti come Archyl.

Cos'e il Modello C4? Una Guida Completa per i Team Software

I diagrammi di architettura software hanno un problema di reputazione. Sono o troppo astratti per essere utili o troppo dettagliati per essere mantenibili. Probabilmente li avete visti entrambi: il diagramma a singolo riquadro etichettato "Il Sistema" che non dice nulla, e l'enorme diagramma UML con 200 classi che dice tutto tranne quello che effettivamente vi serve sapere.

Il modello C4, creato da Simon Brown, risolve questo problema prendendo in prestito un'idea dalla cartografia. Le mappe funzionano a diversi livelli di zoom. Si inizia con una mappa del mondo per orientarsi, poi si ingrandisce su un paese, poi una citta, poi una strada. Ogni livello mostra la giusta quantita di dettaglio per le domande che vi state ponendo. Il modello C4 applica lo stesso principio all'architettura software.

In questa guida, esamineremo tutto cio che dovete sapere sul modello C4: cosa rappresenta ogni livello, quando usarlo, gli errori comuni e come i team moderni implementano il C4 nella pratica.

Cosa Significa C4?

C4 sta per i quattro livelli di astrazione che il modello definisce:

  1. Context (Contesto) -- Il quadro generale. Come il vostro sistema si inserisce nel mondo.
  2. Containers (Container) -- I blocchi tecnici di alto livello del vostro sistema.
  3. Components (Componenti) -- La struttura interna di ogni container.
  4. Code (Codice) -- I dettagli implementativi reali.

Ogni livello risponde a domande diverse per pubblici diversi. Un product manager si interessa del Contesto. Un platform engineer si interessa dei Container. Uno sviluppatore che lavora su un servizio specifico si interessa dei Componenti. Nessuno ha davvero bisogno del livello Codice disegnato a mano -- ne parleremo piu avanti.

La forza del C4 non sta in un singolo diagramma. Sta nella gerarchia. Ogni elemento a un livello si decompone in un diagramma al livello successivo. Un riquadro etichettato "Backend API" nel diagramma dei Container diventa il suo diagramma dei Componenti che mostra i moduli interni. Questo crea una vista navigabile e zoomabile della vostra architettura.

Livello 1: Diagramma di Contesto di Sistema

Il diagramma di Contesto di Sistema e il punto di partenza per qualsiasi modello C4. Risponde a una domanda: come si inserisce il vostro sistema nell'ambiente circostante?

Cosa Mostra

  • Il vostro sistema software come un singolo riquadro al centro
  • Le persone (attori, ruoli, personas) che lo utilizzano
  • I sistemi esterni con cui si integra
  • Le relazioni tra tutti questi elementi

Cosa Non Mostra

  • La struttura interna del vostro sistema
  • Le scelte tecnologiche
  • Database, code o infrastruttura
  • Dettagli di deployment

Un Esempio Reale

Immaginate di documentare una piattaforma e-commerce. Il vostro diagramma di Contesto di Sistema mostrerebbe:

[Cliente] --> [Piattaforma E-Commerce] : Sfoglia prodotti, effettua ordini
[Personale Magazzino] --> [Piattaforma E-Commerce] : Gestisce l'inventario
[Piattaforma E-Commerce] --> [Payment Gateway (Stripe)] : Processa pagamenti
[Piattaforma E-Commerce] --> [Corriere (FedEx API)] : Crea spedizioni
[Piattaforma E-Commerce] --> [Servizio Email (SendGrid)] : Invia notifiche

Cinque utenti e sistemi esterni. Un solo riquadro per l'intera piattaforma. Tutto qui.

Perche Questo Livello e Importante

Il diagramma di Contesto di Sistema costringe alla chiarezza sui confini. Cosa possedete? Da cosa dipendete? Chi sono i vostri utenti? Queste domande sembrano ovvie, ma i team faticano regolarmente a rispondere in modo coerente.

Questo diagramma e anche quello che mostrate agli stakeholder non tecnici. Il vostro CEO puo guardarlo e capire cosa fa il sistema, chi lo usa e da quali servizi di terze parti dipende. Provate a fare lo stesso con un diagramma di classi UML.

Consigli per un Buon Diagramma di Contesto di Sistema

  • Mantenete tutto in una pagina. Se non ci sta, il confine del vostro sistema potrebbe essere sbagliato.
  • Etichettate ogni relazione con una frase verbale: "invia email tramite", "processa pagamenti attraverso", "legge l'inventario da".
  • Includete tutti i sistemi esterni, anche quelli che date per scontati (DNS, CDN, monitoraggio).
  • Non includete dettagli interni. Resistete alla tentazione.

Livello 2: Diagramma dei Container

Il diagramma dei Container ingrandisce il vostro sistema e mostra i suoi blocchi tecnici di alto livello. Nella terminologia C4, un "container" e qualsiasi unita separatamente deployabile o eseguibile -- non necessariamente un container Docker.

Cosa Conta come Container

  • Un'applicazione web (React SPA, app Next.js)
  • Un'applicazione mobile (app iOS, app Android)
  • Un servizio backend API (Go API, server Node.js)
  • Un database (PostgreSQL, MongoDB, Redis)
  • Un message broker (Kafka, RabbitMQ)
  • Un sistema di file storage (S3, MinIO)
  • Una funzione serverless (AWS Lambda, Cloud Functions)

Ogni container gira nel suo processo o ha il suo storage dati. Questo e il fattore distintivo. Due package Go deployati insieme fanno parte dello stesso container. Due servizi Go deployati indipendentemente sono container separati.

Un Esempio Reale

Ingrandendo la nostra piattaforma e-commerce:

[Single-Page Application (React)] --> [API Gateway (Kong)] : Effettua chiamate API (HTTPS/JSON)
[API Gateway] --> [Order Service (Go)] : Instrada le richieste
[API Gateway] --> [Product Service (Go)] : Instrada le richieste
[API Gateway] --> [User Service (Go)] : Instrada le richieste
[Order Service] --> [Order Database (PostgreSQL)] : Legge/scrive ordini
[Product Service] --> [Product Database (PostgreSQL)] : Legge/scrive prodotti
[User Service] --> [User Database (PostgreSQL)] : Legge/scrive utenti
[Order Service] --> [Message Queue (Kafka)] : Pubblica eventi ordini
[Notification Service (Go)] --> [Message Queue] : Consuma eventi ordini

Ora potete vedere le scelte tecnologiche, i pattern di comunicazione e i data store. Un architetto puo discutere se unire i database degli Ordini e dei Prodotti. Un ingegnere DevOps puo pianificare la topologia di deployment. Un nuovo sviluppatore puo capire dove finisce il frontend React e dove inizia il backend Go.

Consigli per un Buon Diagramma dei Container

  • Includete la tecnologia tra parentesi: "Order Service (Go)", "Database (PostgreSQL)".
  • Mostrate il protocollo di comunicazione sulle relazioni: "HTTPS/JSON", "gRPC", "AMQP".
  • Se avete piu di 15-20 container, create piu diagrammi dei Container per sottosistemi diversi.
  • Includete database e code. Anche loro sono container.
  • Non scendete sotto il livello container qui. I moduli interni appartengono al diagramma dei Componenti.

Livello 3: Diagramma dei Componenti

Il diagramma dei Componenti ingrandisce un singolo container e mostra i suoi blocchi strutturali interni. I componenti sono le principali astrazioni all'interno di un container -- pensate a package, moduli, servizi o layer.

Cosa Conta come Componente

  • Un handler HTTP o controller
  • Un servizio di logica di business
  • Un repository o layer di accesso dati
  • Un client per API esterne
  • Un processore di job in background
  • Un middleware o interceptor

I componenti sono raggruppamenti logici, non necessariamente singoli file. Il componente OrderHandler potrebbe essere implementato in diversi file, ma concettualmente e un'unica cosa: la parte del sistema che gestisce le richieste HTTP relative agli ordini.

Un Esempio Reale

Ingrandendo il container Order Service:

[Order Handler] --> [Order Service] : Delega la logica di business
[Order Service] --> [Order Repository] : Persiste gli ordini
[Order Service] --> [Payment Client] : Valida il pagamento
[Order Service] --> [Inventory Client] : Verifica la disponibilita
[Order Repository] --> [Order Database (PostgreSQL)] : Query SQL
[Payment Client] --> [Payment Gateway (Stripe)] : HTTPS/REST
[Inventory Client] --> [Product Service] : gRPC

Uno sviluppatore che entra in questo team puo immediatamente vedere come e strutturato l'Order Service: le richieste arrivano attraverso l'handler, la logica di business risiede nel service, l'accesso ai dati passa attraverso il repository, e le chiamate esterne passano attraverso client dedicati.

Quando Creare Diagrammi dei Componenti

Non ogni container necessita di un diagramma dei Componenti. Createne uno quando:

  • Il container e abbastanza complesso che un nuovo sviluppatore farebbe fatica a navigarlo
  • Ci sono pattern di design importanti (architettura esagonale, CQRS) che il diagramma puo rendere espliciti
  • Piu team contribuiscono allo stesso container e hanno bisogno di una comprensione condivisa della sua struttura

Saltate il diagramma dei Componenti quando:

  • Il container e semplice (un servizio CRUD con tre endpoint)
  • La struttura del codice e ovvia dalla disposizione delle cartelle
  • Il container e uno strumento di terze parti (Redis, Kafka) di cui non controllate gli interni

Livello 4: Diagramma del Codice

Il livello Codice mostra i dettagli implementativi reali: classi, interfacce, funzioni e le loro relazioni. E essenzialmente un diagramma di classi UML o un diagramma entita-relazione.

La Verita sul Livello 4

Simon Brown stesso sconsiglia di creare diagrammi del Codice manualmente. Ecco perche:

  • Cambiano troppo frequentemente. Ogni refactor li invalida.
  • Sono costosi da mantenere. Disegnare diagrammi di classi a mano e noioso.
  • Duplicano informazioni che esistono gia nel codice.
  • Gli IDE moderni possono generarli su richiesta.

Se avete bisogno di diagrammi a livello Codice, generateli dal vostro codice sorgente usando strumenti che supportano il vostro linguaggio. Non disegnateli a mano.

Quando i Diagrammi del Codice Sono Davvero Utili

Ci sono eccezioni:

  • Algoritmi complessi che beneficiano di una spiegazione visiva passo dopo passo
  • Design pattern (Strategy, Observer, State Machine) dove la struttura e la parte interessante
  • Superfici API pubbliche dove volete documentare i contratti
  • Materiale per colloqui o onboarding dove state insegnando dei pattern

In pratica, la maggior parte dei team usa tre livelli del C4 (Contesto, Container, Componenti) e lascia il livello Codice alle viste generate dall'IDE.

I Diagrammi Supplementari

Oltre ai quattro livelli principali, Simon Brown definisce diversi diagrammi supplementari che completano la gerarchia C4:

Diagramma del Landscape di Sistema

Un diagramma di Contesto di Sistema ingrandito ancora di piu. Mostra tutti i sistemi software di un'organizzazione e come si relazionano tra loro. Utile per gli architetti enterprise che gestiscono un portfolio di sistemi.

Diagramma di Deployment

Mappa i container all'infrastruttura. Mostra quali container girano su quali server, in quali regioni cloud, dietro quali load balancer. Essenziale per i team DevOps e piattaforma.

Diagramma Dinamico

Mostra come gli elementi collaborano a runtime per soddisfare un caso d'uso specifico. Simile a un diagramma di sequenza UML ma con la notazione C4. Utile per documentare flussi complessi come "cosa succede quando un utente effettua un ordine".

Modello C4 vs. Altri Approcci

C4 vs. UML

UML definisce 14 tipi di diagramma. La maggior parte dei team ne usa 2-3, e spesso in modo incoerente. Il C4 vi da 4 livelli con scopi chiari. E piu semplice da imparare, piu semplice da usare e piu semplice da mantenere.

Detto questo, C4 e UML non si escludono a vicenda. Potete usare diagrammi di classi UML al Livello 4, o diagrammi di sequenza UML come diagrammi Dinamici. Il C4 fornisce la gerarchia; UML fornisce notazioni specifiche quando ne avete bisogno.

C4 vs. Arc42

Arc42 e un template per la documentazione dell'architettura. Copre molto piu dei soli diagrammi: requisiti di qualita, vincoli, rischi, viste di deployment e altro. Il C4 si concentra specificamente sui diagrammi gerarchici. Molti team usano entrambi: Arc42 come struttura documentale e C4 come approccio alla diagrammazione al suo interno.

C4 vs. "Basta Usare una Lavagna"

Le lavagne sono ottime per l'esplorazione e il brainstorming. Sono terribili per la documentazione. I diagrammi alla lavagna vengono cancellati, fotografati male e mai aggiornati. Il C4 fornisce la struttura per trasformare le esplorazioni alla lavagna in documentazione duratura.

Errori Comuni nell'Adozione del C4

Cercare di Mostrare Tutto in Una Volta

L'intero senso del C4 e la divulgazione progressiva. Se il vostro diagramma dei Container mostra singole classi, avete collassato la gerarchia. Ogni diagramma dovrebbe mostrare elementi a un solo livello di zoom.

Ignorare le Relazioni

Riquadri senza frecce sono un inventario, non architettura. Le relazioni -- chi chiama chi, quale protocollo usano, quali dati fluiscono tra di essi -- sono spesso piu preziose dei riquadri stessi. Etichettate sempre le vostre relazioni.

Farne un'Attivita di una Sola Persona

La documentazione dell'architettura e uno sport di squadra. Se solo una persona crea e mantiene i diagrammi, rifletteranno la comprensione (o l'incomprensione) di quella singola persona. Revisionate i diagrammi C4 come team, idealmente come parte del vostro processo di review dell'architettura.

Non Collegare ad Altra Documentazione

Un diagramma C4 acquisisce potenza quando e connesso ad altri artefatti. Collegate i container ai loro runbook di deployment. Collegate i componenti ai loro Architecture Decision Records (ADR). Collegate i sistemi esterni alla loro documentazione API. I diagrammi isolati hanno meno valore di quelli connessi.

Lasciare che i Diagrammi Diventino Obsoleti

Il piu grande nemico di qualsiasi approccio alla documentazione e l'obsolescenza. Un diagramma che descrive l'architettura dell'anno scorso e peggio di nessun diagramma perche fuorvia attivamente. Integrate gli aggiornamenti dei diagrammi nel vostro flusso di lavoro -- rendeteli parte delle checklist delle pull request, delle sprint review o delle riunioni sull'architettura.

Come Archyl Implementa il Modello C4

Archyl e stato costruito attorno al modello C4 come concetto di prima classe. Ecco come ogni livello si mappa alle funzionalita della piattaforma:

Contesto di Sistema in Archyl

Quando create un progetto in Archyl, definite i sistemi e le loro relazioni con gli attori esterni. La vista del Contesto di Sistema si genera automaticamente dal vostro modello -- nessun disegno manuale necessario. Aggiungete un sistema, aggiungete un attore esterno, tracciate una relazione, e il diagramma si aggiorna in tempo reale.

Diagramma dei Container in Archyl

All'interno di ogni sistema, definite i container con i loro stack tecnologici. Archyl renderizza il diagramma dei Container e vi permette di navigare in profondita in qualsiasi container per vederne i componenti. Le relazioni tra i container mostrano i protocolli di comunicazione e i flussi di dati.

Diagramma dei Componenti in Archyl

All'interno di ogni container, definite i componenti. Archyl li mappa al codice reale attraverso la sua funzionalita Code Elements, che collega i componenti a file e directory specifici nel vostro repository. Questa connessione tra diagramma e codice e cio che abilita il rilevamento del drift.

Discovery Alimentata dall'IA

Cio che rende Archyl diverso da uno strumento di disegno e che non dovete costruire il modello a mano. Connettete il vostro repository, lanciate la discovery IA, e Archyl genera una bozza del modello C4 dal vostro codebase. L'IA identifica sistemi, container, componenti e relazioni analizzando la struttura del codice, i file di configurazione e i grafi delle dipendenze.

Revisionate i suggerimenti, accettate o modificate, e avete un modello C4 in minuti invece che in settimane.

Rilevamento del Drift

Una volta che il vostro modello C4 esiste, Archyl verifica continuamente se riflette ancora la realta. Il punteggio di drift vi dice quale percentuale della vostra architettura documentata esiste effettivamente nel codebase. Se qualcuno rinomina un servizio o elimina un componente, il punteggio di drift scende, e sapete che la vostra documentazione ha bisogno di aggiornamento.

Questo e il gap che la maggior parte degli strumenti C4 non colma. Creare diagrammi e la parte facile. Mantenerli accurati e la parte difficile. Il rilevamento del drift di Archyl colma questa lacuna.

Per Iniziare con il C4: Un Approccio Passo dopo Passo

Se il vostro team e nuovo al modello C4, ecco un percorso pratico di adozione:

Settimana 1: Contesto di Sistema

Riunite il vostro team per un workshop di un'ora. Disegnate il vostro sistema come un singolo riquadro. Identificate ogni ruolo utente e sistema esterno. Tracciate le relazioni. Sarete sorpresi da quanta discussione genera questo semplice esercizio -- e da quanta coerenza crea.

Settimana 2: Diagramma dei Container

Prendete il riquadro del sistema dal vostro diagramma di Contesto e scomponetelo in container. Quali sono le unita deployabili? Quali database esistono? Quali message broker o cache sono in gioco? Qui e dove rendete visibili le scelte tecnologiche.

Settimane 3-4: Diagrammi dei Componenti per i Container Chiave

Scegliete i due o tre container piu complessi. Scomponete ciascuno in componenti. Qui e dove i nuovi sviluppatori passeranno la maggior parte del tempo, quindi date priorita ai container piu difficili da capire.

Continuativamente: Mantenere e Far Evolvere

La creazione iniziale e la parte facile. La disciplina di mantenere i diagrammi aggiornati e cio che separa i team che ottengono valore dal C4 da quelli che lo abbandonano dopo un mese. Automatizzate cio che potete. Usate strumenti che rilevano il drift. Rendete le review dei diagrammi parte del vostro flusso di sviluppo.

Perche il C4 Funziona

Il modello C4 non e tecnicamente rivoluzionario. Scomposizione gerarchica e livelli di astrazione esistono nell'informatica dagli anni '60. Cio che Simon Brown ha fatto e stato impacchettare queste idee in un framework semplice, memorabile, con regole chiare e notazione minimale.

Funziona perche:

  • E facile da imparare. Quattro livelli. Riquadri e frecce. Nessuna certificazione UML richiesta.
  • Scala bene. Da un progetto del weekend a una piattaforma enterprise, gli stessi quattro livelli si applicano.
  • Serve pubblici diversi. Dirigenti, architetti e sviluppatori ottengono ciascuno il diagramma che parla la loro lingua.
  • E indipendente dallo strumento. Potete usare una lavagna, uno strumento di disegno, un formato testuale o una piattaforma dedicata come Archyl.
  • Si concentra sulle cose giuste. Struttura e relazioni, non dettagli implementativi.

Se la documentazione architetturale del vostro team consiste in file Visio obsoleti, foto di lavagne su Slack e conoscenza tribale, il modello C4 e il percorso piu pratico verso qualcosa di migliore.


Pronti a costruire il vostro modello C4? Provate Archyl gratis e generate il vostro primo diagramma di architettura dal codice in pochi minuti. Oppure approfondite: AI-Powered Architecture Discovery | Architecture as Code: Definite il Vostro Modello C4 in YAML | Architecture Drift Score.