Arquitetura em Camadas
Dando continuidade na série sobre estilos de arquitetura, nesse post iremos falar sobre o estilo de arquitetura em camadas.
Caso você tenha perdido os posts anteriores, dê uma olhada em:
Arquitetura em camadas
O estilo de arquitetura em camadas (layered architecture e também conhecida como n-tiered architecture, onde N é o número de camadas) é um dos mais conhecidos. Esse estilo é de fato um padrão para a maioria das aplicações e serviços, isso porque o mesmo trata-se de um estilo muito simples, familiar e de baixo custo para implementação.
Também é um jeito natural de se desenvolver aplicações ou serviços devido à lei de Conway.
Topologia
A topologia desse estilo de arquitetura pode ser representada da seguinte forma:
Existem outras variações dessa topologia (por exemplo com uma camada de serviços ou agrupamentos de camadas em módulos), ou seja, mais ou menos camadas existirão. Porém, essas quatros comumente estão presentes em aplicações ou serviços por aí.
Cada camada tem uma função e responsabilidade específica dentro da arquitetura, por exemplo:
- Apresentação: A camada de apresentação deveria ser responsável por lidar com toda a interface do(a) usuário(a) e lógicas de comunicação com navegadores.
- Negócio: A camada de negócio deveria ser responsável por executar operações e fluxos de negócios específicos associados à uma requisição.
- Persistência: A camada de persistência deveria ser responsável por persistir ou recuperar informações fisicamente salvas em alguma unidade de armazenamento.
- Banco de dados: A camada do banco de dados deveria ser responsável por manter os dados salvos de forma física.
- etc…
Cada camada forma uma abstração em volta da sua necessidade e trabalho à ser realizado dentro de uma requisição em particular. Além disso, barreiras devem existir de forma implícita entre elas, ou seja, a camada de apresentação não deveria saber ou se preocupar em como recuperar informações de um cliente ou produto (o mesmo aplica-se para as demais camadas presentes na arquitetura).
Além disso é muito importante definir o fluxo de cada camada, ou seja, quais estão abertas ou fechadas.
Nesse exemplo acima todas as camadas estão fechadas, mas, o que isso quer dizer? Dizer que uma camada está aberta ou fechada refere-se em informar se o fluxo pode ou não pular tal camada dentro do fluxo da requisição, sendo assim, camadas fechadas devem processar as requisições através da sua ordem hierarquica.
Repare que nesse exemplo acima como todas as camadas estão fechadas o fluxo deve ocorrer exatamenta na forma em que elas foram definidas e posicionadas hierarquicamente, ou seja:
- A camada de apresentação fala com a camada de negócio
- A camada de negócio fala com a camada de persistência
- A camada de persistência fala com a camada do bando de dados
Já nesse outro exemplo acima podemos ver uma variação com uma nova camada, a camada de serviço. E também como a camada de serviço está marcada como aberta, isso quer dizer que a mesma não é obrigatória em todas as requisições ou fluxos, dessa forma:
- A camada de apresentação fala com a camada de negócio
- A camada de negócio fala com a camada de serviço ou persistência
- A camada de serviço fala com a camada de persistência
- A camada de persistência fala com a camada do bando de dados
Avaliações das características arquiteturais
Cada estilo de arquitetura possuí uma série de características arquiteturais, um estilo favorece uma característica A e desfavorece uma característica B. Outro estilo favorece B e desfavorece A, etc… Já falamos sobre tais características arquiteturais.
Para que não seja necessário avaliar todas as possibilidades vamos emprestar a tabela de avaliações citada em Fundamentos da arquitetura de sistemas (existem várias outras características não cobertas pela tabela) onde vamos avaliar algumas essenciais e principais.
No meu ponto de vista dei as seguintes notas para cada característica (troquei as estrelas por números de 0 à 5):
Características arquiteturais | Avaliação (0-5) |
---|---|
Tipo de particionamento | Técnico |
Numéro de quantas | 1 |
Deploiabilidade | 1 |
Elasticidade | 1 |
Evolução | 1 |
Tolerança à falhas | 1 |
Modularidade | 1 |
Custo geral | 5 |
Performance | 2 |
Confiabilidade | 2 |
Escalabilidade | 1 |
Simplicidade | 5 |
Testabilidade | 3 |
Obs: Não se preocupe com “tipo de particionamento” e “número de quantas”, iremos ver mais sobre ambos em post’s futuros.
Conclusão
Nesse post demos continuidade na série sobre estilos arquiteturais e falamos sobre o estilo de arquitetura em camadas (layered architecture).
Os posts serão mais focados em teoria, ou seja, irão apresentar e trazer os conceitos. Se você quer algo mais prático fique de olho no meu canal do Youtube onde os estilos de arquiteturas serão implementados na prática.
Abraços, até a próxima.