Pular para o conteúdo

Visões

O LikeC4 é baseado em modelos. As visões são projeções do modelo a partir de diferentes perspectivas, escopos e níveis de detalhe, como:

  • Visões gerais de sistemas/serviços
  • Interações entre componentes em casos de uso específicos
  • Fluxos de dados e diagramas de sequência

O LikeC4 não impõe regras específicas, como um número rígido de níveis ou o que deve ser incluído — isso depende totalmente de você e do seu contexto.

As visões são definidas na seção views.
Elas podem ter nome (que deve ser único) ou não ter nome (não podem ser referenciadas, mas ainda podem ser exportadas):

views {
// with name
view index {
}
// unnamed
view {
}
}

O nome da visão é usado como nome do arquivo de imagem durante a exportação e como parte da URL ao compartilhar, portanto é recomendável definir um.

As visões podem ter title, description, tags e links:

views {
view epic12 {
#next, #epic-12
title "Cloud System - Changes in Epic-12"
// Description can be Markdown with triple quotes
description """
This diagram shows the **high-level**
components and interactions.
"""
link https://my.jira/epic/12 'Epic-12'
}
}

As propriedades devem ser definidas antes de qualquer predicado.

Uma visão pode ser definida para um elemento específico (view of ...).
Nesse caso, a visão herdará o escopo desse elemento:

views {
view {
include api // ⛔️ Error: 'api' is not found
}
view of cloud.backend {
include api // ✅ This is OK, resolves to 'cloud.backend.api'
}
view of legacy {
include api // ✅ This is OK, resolves to 'legacy.api'
}
}

Além disso, uma visão com escopo se torna a visão padrão do elemento:

views {
view {
// on click navigates to 'view1',
// because it is default for 'cloud.backend'
include cloud.backend
}
view view1 of cloud.backend {
include *
}
}

Você pode definir várias visões para o mesmo elemento; a visão padrão é determinada pela ordem em que elas aparecem.

Visões podem ser estendidas para evitar duplicação, criar uma “baseline” ou, por exemplo, “slides” para uma apresentação:

views {
view view1 {
include *
}
view view2 extends view1 {
title 'Same as View1, but with more details'
style * {
color muted
}
include some.backend
}
// cascade inheritance
view view3 extends view2 {
title 'Same as View2, but with more details'
include * -> some.backend
}
}

Os predicados e as regras de estilo das visões estendidas são aplicados depois dos definidos nas visões ancestrais.

Uma visão estendida também herda o escopo:

views {
view view1 of cloud.backend {
title 'Backend components'
}
view view2 extends view1 {
include api // ✅ This is OK, references 'cloud.backend.api'
}
}