HomeTodos os Posts
Estilos Arquiteturais

Estilos Arquiteturais

July 07, 2022

Tempo de leitura: 5 minutos

Padrões e Estilos Arquiteturais

No estudo de arquitetura de software é possível identificar o uso dos termos estilo e padrão arquitetural. Em alguns textos1 os termos são utilizados de forma intercambiáveis, apesar de outros fazem questão de diferencia-los2. Para além de uma questão etimológica, a nítida identificação da finalidade de cada um desses conceitos, tem por objetivo facilitar a escolha da solução mais adequada para o um dado problema.

Nesse sentido, podemos dizer que padrões focam em soluções para problemas específicos de arquitetura, enquanto estilos propõem como os módulos de um sistema devem ser organizados3. Para exemplificar as diferenças vamos utilizar o Model-View-Controller (MVC) e o Pipes & Filtros.

Model View Controller (MVC)

O padrão Model View Controller (MVC) divide a interação da interface do usuário em três funções distintas. O MVC considera três papéis:

  • o modelo (model) é um objeto que representa informações sobre o domínio;
  • a visão (view), representa a exibição do modelo na interface gráfica;
  • o controlador (controller), responsável por tratar quaisquer mudanças nas informações.
Diagrama do Padrão Arquitetural MVC

O MVC pode ser pensado como padrão com dois objetivos principais: separar a apresentação do modelo e separar o controlador da visão. A segunda divisão, a separação da visão e do controlador, é menos importante, contudo, a separação da apresentação do modelo é uma das características de um bom projeto de software. Esta separação é importante por várias razões:

  • a apresentação e o modelo são preocupações diferentes;
  • dependendo do contexto, os usuários querem ver a mesma informação de diferentes maneiras;
  • objetos não visuais são geralmente mais fáceis de testar do que os visuais.

O valor do padrão MVC está em suas duas separações. Dessa maneira seu uso é sempre recomendado, exceto em sistemas muito simples, onde o modelo não altera o comportamento visual do sistema.

Pipes & Filtros

Caso algum dia você tenha utilizado o operador | (pipe) em terminais de sistemas operacionais “Unix-like”, você já tirou proveito do estilo arquitetural Pipes & Filtros. Por exemplo, execute o comando descrito a seguir em um terminal:

echo unix | tr a-z A-Z

Na prática o resultado do primeiro comando echo unix será passado para o segundo ( tr a-z A-Z). Dessa maneira, é possível fazer o encadeamento de comandos potencializando o que pode ser feito pelo sistema operacional. Esse é um exemplo de uso de um dos estilos fundamentais na arquitetura de software chamado Pipes & Filtros.

Esse estilo arquitetural consiste em dividir as funcionalidades em partes discretas. A topologia da arquitetura consiste basicamente em dutos (pipe) e filtros (filters) conforme ilustrado na figura a seguir.

Diagrama do Estilo Arquitetural Pipes & Filter
Diagrama do Estilo Arquitetural Pipes & Filter

Os pipes formam o canal de comunicação entre os filtros. Cada duto é tipicamente unidirecional e ponta-a-ponta, ou seja, ele aceita uma carga de trabalho (payload) de uma fonte e tem como função direcionar a saída para outra fonte distinta. O payload pode ser qualquer formato de dados, mas o ideal é um utilizar um formato de menor tamanho - JSON ao invés de XML, por exemplo - visando um alto desempenho.

Os filtros são autocontidos, independentes uns dos outros e em geral sem estado. Os filtros deveriam realizar apenas uma tarefa, de modo que, tarefas mais complexas deveriam ser organizadas como uma sequência de filtros.

Captei a vossa mensagem (…)

Diagrama do Estilo Arquitetural Pipes & Filter

Só que não. Em um primeiro momento não é fácil diferenciar os dois conceitos. Por hora, entenda que o MVC é um padrão que resolve o problema de separar a apresentação do modelo. Por outro lado, Pipes & Filtros constituem um estilo arquitetural dado que propõe como os módulos de um sistema devem ser organizados. Vamos então trazer uma descrição sobre cada um dos conceitos.

Um padrão arquitetural é uma coleção nomeada de decisões arquiteturais que são aplicáveis para um problema de desenho recorrente, no qual deve ser parametrizado para responder diferentes contextos de desenvolvimento de software no qual o problema aparece2. Com base nessa definição, podemos notar que o foco de um padrão arquitetural está na solução de um problema específico, algo que não necessariamente existe ao se propor um estilo arquitetural.

Por sua vez, os estilos de arquiteturais descrevem uma relação nomeada de componentes cobrindo uma variedade de características de arquitetura1. Trata-se de um conjunto de regras que devem ser seguidas.

O conhecimento de diferentes estilos arquiteturais permite criar um vocabulário único que atua como abreviação, facilitando a comunicação entre arquitetos, desenvolvedores, pessoas de infraestrutura e etc. O conjunto de estilos arquiteturais podem ser classificados dado a forma que o sistema será implantado (deployment), ou seja, estilos arquiteturais para sistemas monolíticos e distribuídos.

Classificação dos Estilos Arquiteturais

Os estilos de arquitetura podem ser classificados em dois tipos principais: monolíticos em que é possível identificar um único deployment (unidade de implantação) de todo o código fonte; e distribuídos onde o processo de deployment resulta em dois ou mais “executáveis” que estão conectados por meio de protocolos de acesso remoto, seja uma requisição HTTP ou mesmo uma chamada remota de métodos(RPC).

Embora nenhum esquema de classificação seja perfeito, todas as arquiteturas distribuídas compartilham um conjunto comum de desafios e problemas não encontrados nos estilos de arquitetura monolítica, tornando este esquema de classificação uma boa separação entre os vários estilos de arquitetura.

MonolíticoDistribuído
Arquitetura em CamadaArquitetura Orientada à Eventos
Pipes & FiltersArquitetura Orientada à Serviço
MicrokernelMicrosserviços

Saber Usar >>> Nomear

A minha expectativa, para aqueles que chegaram até aqui nesse texto, é que entendam que essa discussão é estritamente sobre saber quando usar um padrão ou estilo arquitetural. Utilizar os termos de forma intercambiáveis não é um problema. No final das contas, a discussão que queremos suscitar aqui, é que estilos são um conjunto de regras, do que qual você tem (ou deveria ter) a liberdade de escolher qual seguir. Um padrão arquitetural é solução previamente provada para determinado problema, até mesmo por isso, tem um escopo limitado por definição. Conheça todos (estilos ou padrões). Suas vantagens e limitações. Esse é o principal conselho desse texto.

Referências

  1. Richards, Mark, and Neal Ford. Fundamentals of Software Architecture: An Engineering Approach. O’Reilly Media, 2020. 2

  2. Tailor, R. N.; Medvidovic, N.; Dashofy, E. M. Software Architecture: Foundations, Theory, and Practice. Wiley Publishing. 2009. 2

  3. Marco Tulio Valente. Engenharia de Software Moderna: Princípios e Práticas para Desenvolvimento de Software com Produtividade, 2020.


Written by Vagner Clementino. Follow me on Twitter