Primeiros passos
Para iniciar o tutorial, você tem duas opções:
- Abra o Playground vazio em uma nova aba
- Instale a extensão para VS Code (ou pelo Open VSX) e crie um novo arquivo com a extensão
.c4
Depois, siga estas etapas:
-
Preparar a especificação
Seção intitulada “Preparar a especificação”Vamos começar definindo os tipos de elementos que existirão em nossa arquitetura. Precisamos apenas de dois:
actoresystem:tutorial.c4 specification {element actorelement system} -
Criar o modelo
Seção intitulada “Criar o modelo”Comece pelos elementos de nível superior e defina o modelo:
tutorial.c4 specification {element actorelement system}model {customer = actor 'Customer'saas = system 'Our SaaS'}Estes são os primeiros elementos do nosso modelo de arquitetura. Agora vamos adicionar mais detalhes.
-
Adicionar uma hierarquia
Seção intitulada “Adicionar uma hierarquia”Considere que nosso sistema possui dois componentes principais:
uiebackend. Vamos adicionar um novo tipo à especificação e atualizar o modelo.tutorial.c4 specification {element actorelement systemelement component}model {customer = actor 'Customer'saas = system 'Our SaaS' {component uicomponent backend}} -
Adicionar relacionamentos
Seção intitulada “Adicionar relacionamentos”Qualquer ligação entre elementos — por exemplo, interações, chamadas, delegações, dependências ou fluxos — pode ser representada como um relacionamento. Você pode defini-los da forma que fizer mais sentido para o seu modelo.
No modelo:
tutorial.c4 specification {element actorelement systemelement component}model {customer = actor 'Customer'saas = system 'Our SaaS' {component uicomponent backend// UI fetches data from the Backendui -> backend}// Customer uses the UIcustomer -> ui 'opens in browser'} -
Criar o primeiro diagrama
Seção intitulada “Criar o primeiro diagrama”Os diagramas são renderizados a partir de visões (views). As visões são projeções do modelo definidas por predicados, que determinam o que deve ser incluído ou excluído.
Comece com uma visão panorâmica (“Landscape”):
tutorial.c4 specification {element actorelement systemelement component}model {customer = actor 'Customer'saas = system 'Our SaaS' {component uicomponent backend// UI fetches data from the Backendui -> backend// Customer uses the UIcustomer -> ui 'opens in browser'}}views {view index {include *}}O resultado é este:

-
Adicionar mais visões
Seção intitulada “Adicionar mais visões”tutorial.c4 specification {element actorelement systemelement component}model {customer = actor 'Customer'saas = system 'Our SaaS' {component uicomponent backend// UI requests data from the Backendui -> backend// Customer uses the UIcustomer -> ui 'opens in browser'}}views {view index {include *}view of saas {include *}}Imagine que aproximamos o foco no elemento
saaspara visualizar seus elementos aninhados e os relacionamentos entre eles:
-
Enriquecer o modelo
Seção intitulada “Enriquecer o modelo”Vamos adicionar descrições, definir a forma (shape) do
uie incluir um rótulo no relacionamentoui -> backend.tutorial.c4 specification {element actorelement systemelement component}model {customer = actor 'Customer' {description 'The regular customer of the system'}saas = system 'Our SaaS' {component ui 'Frontend' {description 'Nextjs application, hosted on Vercel'style {icon tech:nextjsshape browser}}component backend 'Backend Services' {description 'Implements business logicand exposes as REST API'}// UI fetches data from the Backendui -> backend 'fetches via HTTPS'}// Customer uses the UIcustomer -> ui 'opens in browser'}views {view index {title 'Landscape view'include *}view of saas {include *style customer {color muted}}}A visão
saasapós as alterações:
-
Fazer alterações no modelo
Seção intitulada “Fazer alterações no modelo”Vamos alterar a descrição de
customere o rótulo do relacionamentocustomer -> ui.tutorial.c4 specification {element actorelement systemelement component}model {customer = actor 'Customer' {description 'The regular customer of the system'description 'Our dear customer'}saas = system 'Our SaaS' {component ui 'Frontend' {description 'Nextjs application, hosted on Vercel'style {icon tech:nextjsshape browser}}component backend 'Backend Services' {description 'Implements business logicand exposes as REST API'}// UI requests data from the Backendui -> backend 'fetches via HTTPS'}// Customer uses the UIcustomer -> ui 'opens in browser'customer -> saas 'enjoys our product'}views {view index {title 'Landscape view'include *}view of saas {include *style customer {color muted}}}Visão
index:
Visão
saas:
-
Experimente você mesmo
Seção intitulada “Experimente você mesmo”Explore este tutorial no Playground e tente fazer o seguinte:
- altere a forma (
shape) do elementocustomer - adicione um banco de dados (usando a forma
storage) e tabelas comocustomerseorders— quais relacionamentos deveriam ser adicionados? - adicione um sistema externo, como o Stripe, e mostre como o backend poderia interagir com ele
Abrir o PlaygroundExperimente este tutorial diretamente no Playground - altere a forma (