Pular para o conteúdo principal

Transform View

Descrição​

O Transform View é uma view que processa dados de domínio elemento por elemento e os transforma em HTML (ou outro formato). Em vez de partir de uma página com marcadores, ele parte dos dados e aplica regras de transformação que dizem como cada tipo de elemento deve ser exibido.

A implementação clássica usa XSLT: o model é produzido (ou convertido) em XML e uma folha de estilo o transforma em HTML. Mas o padrão também pode ser realizado com código que percorre estruturas de dados e as converte, por exemplo, serializadores JSON ou geradores de relatórios. O fluxo é orientado aos dados, enquanto o Template View é orientado à página.

Problemas que resolve​

  • Necessidade de produzir a mesma informação em formatos distintos (HTML, XML, JSON, PDF).
  • Dificuldade de testar a lógica de apresentação embutida em templates.
  • Risco de lógica de domínio vazar para a view, já que a transformação só enxerga os dados recebidos.

Quando usar​

  • Quando a saída é gerada a partir de dados estruturados, como XML ou JSON.
  • Quando a apresentação deve ser testada como função pura de entrada e saída.
  • Quando a tecnologia de transformação (XSLT, serializadores) já é padrão na organização.

Quando evitar​

  • Quando designers precisam editar o HTML diretamente; o Template View é mais amigável.
  • Quando a equipe não domina XSLT ou a linguagem de transformação, que tem curva de aprendizado alta.
  • Em páginas com layout muito livre e pouco estruturado em torno dos dados.

Trade-offs​

GanhoCusto / Risco
Transformação testável como função de entrada e saídaCurva de aprendizado de XSLT e ferramentas similares
Mesma fonte de dados, vários formatos de saídaDifícil para designers visualizarem e editarem a página
Isola a view do ambiente webMenos ferramental de edição visual que HTML com marcadores
Evita lógica de domínio na viewDepuração de transformações é mais trabalhosa
  • Acoplamento: a view depende apenas do formato dos dados, não do model nem do servidor.
  • Testabilidade: boa; a transformação pode ser testada com arquivos de entrada e saída esperada.
  • Desempenho: transformações XML podem ser pesadas; compile e cacheie as folhas de estilo.

Diagrama​

O Controller obtém os dados e invoca o Transformer, que aplica as regras da Stylesheet a cada elemento e devolve a saída.

Exemplo​

Uma lista de produtos em XML é convertida em tabela HTML por uma folha de estilo XSLT, sem acesso ao model.

<xsl:template match="products">
<table>
<xsl:apply-templates select="product"/>
</table>
</xsl:template>

<xsl:template match="product">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="format-number(price, '0.00')"/></td>
</tr>
</xsl:template>

Hoje o padrão aparece sobretudo como serialização de JSON/XML em APIs (Jackson, System.Text.Json) e em geradores de relatórios. Em SPAs, o servidor entrega dados e o cliente os transforma em UI, que é essencialmente a mesma ideia levada ao navegador.

Padrões relacionados​

  • Template View — alternativa orientada à página, com marcadores no HTML.
  • Two Step View — pode ser implementado com duas transformações em sequência.
  • Model View Controller — o Transform View é uma forma de implementar a view.
  • Data Transfer Object — os dados transformados costumam ser DTOs ou estruturas serializáveis.
  • Strategy — escolha do transformador conforme o formato de saída.

Referência​