Pular para o conteúdo

Relações: as setas

Uma relação é uma seta de uma caixa para outra, com um rótulo curto dizendo o que trafega. Ela descreve intenção — “reserva itens”, “publica o pedido” —, e não protocolo.

model/reservas/elements.yaml
relations:
- from: colaborador
to: reservas
kind: sync
label: Procura e reserva
CampoObrigatórioO que faz
fromsima caixa de origem
tosima caixa de destino
kindnãoo tipo da seta, que decide traço, ponta e cor. Padrão: sync
labelnãopoucas palavras sobre o que trafega. É o título do cartão que aparece ao passar o mouse
descriptionnãoa forma longa, revelada ao passar o mouse
bidirectionalnãotrue põe ponta também na origem
routenãostraight, orthogonal ou bezier, sobrepondo o padrão do diagrama
tagsnãoetiquetas livres
metanãopares chave/valor livres
idnãoum identificador próprio, para o caso raro de algo externo precisar nomear aquela seta

Sem id, o identificador é derivado como <origem>~<tipo>~<destino>. Duas setas iguais entre as mesmas caixas recebem um sufixo #2, #3 e assim por diante.

kindAparênciaUso típico
synclinha cheia, ponta fechadauma chamada em que se espera resposta
asynctracejado longo, ponta abertauma mensagem em que não se espera resposta
eventpontilhado roxo, ponta abertaa publicação de um evento
batchtracejado bem espaçadouma carga periódica
deptracejado fino cinzauma dependência sem tráfego, como uma biblioteca
peerpontas nos dois ladosuma conversa nos dois sentidos

Um tipo desconhecido não some do desenho: vira uma linha cheia com ponta fechada, e o cfour check avisa. Você pode criar tipos próprios em Aparência da modelagem.

Numa lista relations:, em qualquer arquivo do projeto. É a forma que os exemplos usam. Um arquivo só de relações também vale.

Dentro do documento do próprio elemento. Num documento singular de elemento (kind: element), uma lista relations: aninhada tem o from implícito — ele é a caixa que declara:

model/reservas/api.yaml
kind: element
id: api
name: API de Reservas
shape: api
parent: reservas
relations:
- to: banco
kind: sync
label: Le e grava

Escrever from: ali seria ignorado. A escolha entre as duas formas é de organização: setas junto da caixa que as origina ficam fáceis de achar; um arquivo de relações separado é melhor quando a seta atravessa projetos e nenhum dos dois lados deveria ser o dono dela.

Todo campo que cita outra caixa — from, to, parent, scope, subject, target, os seletores de um diagrama, os participantes de um fluxo — segue a mesma regra:

Como está escritoComo resolve
com barra, reservas/apiabsoluta: projeto e identificador
sem barra, apitenta o projeto que declara; se não achar, tenta shared/

Uma referência sem barra não é global: api escrito dentro do projeto portaria procura portaria/api e depois shared/api, e falha se nenhum dos dois existir. Para atravessar projeto, qualifique.

Uma referência que não resolve é erro, não aviso: o cfour check reprova e diz o arquivo e o campo.

Esta é a segunda regra que muda a forma de trabalhar. Quando você desce um nível e descobre qual componente de fato conversa com o banco, a seta desce com ele — e você apaga a versão mais geral.

Antes, no nível de container:

relations:
- from: api
to: banco
kind: sync
label: Le e grava

Depois, quando os componentes da API existem:

relations:
- from: repositorio-de-reservas
to: banco
kind: sync
label: Le e grava

O diagrama de containers continua mostrando a mesma seta: como o repositório está dentro da API, o desenho projeta cada ponta na caixa mais próxima que ele está mostrando. Você não mantém a integração escrita em dois lugares.

Escrever a mesma integração em dois níveis. O resultado são duas setas paralelas no diagrama mais geral. Declare no nível mais fino que você conhece.

Uma seta de uma caixa para ela mesma. É ignorada, com aviso. Uma ação interna não é uma relação — se ela importa, ela é um passo de um fluxo.

Uma seta entre uma caixa e um filho dela. É aceita, mas quase sempre é ruído: a contenção já diz que um está dentro do outro.

Confiar num identificador sem barra para alcançar outro projeto. Ele só procura o projeto local e o shared.

Com caixas e setas, dá para desenhar. Diagrama de contexto.