Privacidade & Cookies
Este site utiliza cookies. Ao continuar, concorda com a sua utilização. Saiba mais, incluindo como controlar os cookies.
Este post faz parte de The Software Architecture Chronicles, uma série de posts sobre Arquitectura de Software. Neles, escrevo sobre o que aprendi sobre Arquitectura de Software, como penso, e como uso esse conhecimento. O conteúdo deste post pode fazer mais sentido se ler os posts anteriores desta série.
No último post, escrevi sobre como as linguagens de programação evoluíram e o que nos diz: que evoluíram sempre no sentido de proporcionar mais modularidade e encapsulamento.
Nos seguintes posts, vou escrever sobre a evolução dos Estilos Arquitectónicos e Padrões Arquitectónicos, por isso hoje vou escrever sobre o que é um Estilo Arquitectónico e o que é um Padrão Arquitectónico.
Como muita terminologia em Desenvolvimento de Software, estes termos não são claros e pessoas diferentes dão-lhe um significado diferente. MSDN diz que Estilos Arquitectónicos e Padrões Arquitectónicos são as mesmas coisas, mas pessoalmente, prefiro pensar neles nas linhas do que é explicado por George Fairbanks e Michael Keeling, o que é dito nesta pilha de respostas de transbordo e como a Wikipédia separa os dois: a diferença chave é o âmbito.
É também importante reforçar a ideia de que Estilos Arquitectónicos, Padrões Arquitectónicos e Padrões de Design não se excluem mutuamente, são complementares e todos eles nos podem ensinar algo, embora, como habitualmente, só devam ser usados quando necessário.
Estilos Arquitectónicos
Estilos Arquitectónicos dizem-nos, em traços muito amplos, como organizar o nosso código. É o nível mais elevado de granularidade e especifica camadas, módulos de alto nível da aplicação e como esses módulos e camadas interagem uns com os outros, as relações entre eles. Exemplos de Estilos Arquitectónicos:
- Baseado em componentes
- Aplicação monolítica
- Camadas
- Pipes e filtros
- Publish-subscribe
- Plug-ins
- Servidor de clientes
- Service-oriented
Um Estilo Arquitectónico pode ser implementado de várias maneiras, com um ambiente técnico específico, políticas específicas, quadros ou práticas.
Padrões arquitectónicos
Um padrão é uma solução recorrente para um problema recorrente. No caso dos Padrões Arquitectónicos, eles resolvem os problemas relacionados com o Estilo Arquitectónico. Por exemplo, “que classes teremos e como irão interagir, a fim de implementar um sistema com um conjunto específico de camadas”, ou “que módulos de alto nível terão na nossa Arquitectura Orientada para os Serviços e como irão comunicar”, ou “quantos níveis terá a nossa Arquitectura Cliente-servidor”.
Arquitectural Patterns têm um impacto extensivo sobre a base de código, na maioria das vezes impactando toda a aplicação quer horizontalmente (ou seja, como estruturar o código dentro de uma camada) ou verticalmente (ou seja, como um pedido é processado das camadas externas para as camadas internas e para trás). Exemplos de Padrões Arquitectónicos:
- Três camadas
- Microkernel
- Model-View-Controller
- Model-View-ViewModel
Design Patterns
Design Patterns differem dos Architectural Patterns no seu âmbito de aplicação, são mais localizados, têm menos impacto na base de códigos, têm impacto numa secção específica da base de códigos, por exemplo:
- Como instanciar um objecto quando só sabemos que tipo precisa de ser instanciado em tempo de execução (talvez uma Classe de Fábrica?);
- Como fazer um objecto comportar-se de forma diferente de acordo com o seu estado (talvez uma máquina de estado, ou um Padrão de Estratégia?).
Conclusão
Como mencionei no início deste post, é tudo sobre o âmbito:
- Um Estilo Arquitectónico é o desenho da aplicação ao mais alto nível de abstracção;
- Um Padrão Arquitectónico é uma forma de implementar um Estilo Arquitectónico;
- Um Padrão de Desenho é uma forma de resolver um problema localizado.
Outras vezes, um padrão pode ser utilizado tanto como um Padrão Arquitectónico ou um Padrão de Design, mais uma vez dependendo do âmbito em que o utilizamos, num projecto específico.
Sources
2004 – Microsoft – Understanding Service-Oriented Architecture
2009 – Microsoft – Microsoft Application Architecture Guide
2010 – Stack Overflow – Qual é a diferença entre Architectural. Padrões e Arquitetura de Arco. Estilos?
2014 – George Fairbanks – Architecture Patterns vs. Architectural Styles
2017 – Wikipedia – Lista de estilos e padrões de arquitectura de software