Arquitetura em Camadas
Definição
A Arquitetura em Camadas (Layered Architecture) é um estilo arquitetural que organiza o sistema em níveis hierárquicos, onde cada camada tem uma função específica ee se comunica apenas com a camada imediatamente abaixo.
Esse modelo busca separar responsabilidades para tornar o sistema mais modular, compreensível e escalável. É uma das abordagens mais utilizadas em aplicações empresariais e sistemas web.
Por que é importante
Ao segmentar o sistema por camadas, facilita-se a manutenção, os testes e a evolução da aplicação. Alterações em uma camada (por exemplo, na interface) podem ser feitas sem impactar diretamente a lógica de negócio ou o acesso a dados.
Além disso, essa separação reduz o acoplamento e melhora a organização do projeto, permitindo uma colaboração mais eficiente entre equipes diferentes.
Estrutura típica
Um exemplo comum com três camadas principais:
- Camada de Apresentação (UI): responsável pela interação com o usuário ou pela exposição de endpoints (APIs).
- Camada de Serviço (ou Aplicação): concentra a lógica de negócio e orquestra os fluxos da aplicação.
- Camada de Persistência (ou Infraestrutura): lida com o acesso a dados, como bancos, arquivos ou serviços externos.
[ Interface (UI) ]
↓
[ Camada de Serviço ]
↓
[ Camada de Persistência ]
Exemplo prático (Python)
Abaixo, um exemplo simples com as três camadas separadas:
# Camada de Persistência
class UsuarioRepositorio:
def buscar_por_id(self, id):
return {"id": id, "nome": "Alice"}
# Camada de Serviço
class UsuarioServico:
def __init__(self, repositorio):
self.repositorio = repositorio
def obter_nome_formatado(self, id):
usuario = self.repositorio.buscar_por_id(id)
return f"Usuário: {usuario['nome']}"
# Camada de Interface (ex: API)
def exibir_usuario(id):
servico = UsuarioServico(UsuarioRepositorio())
print(servico.obter_nome_formatado(id))
# Execução da "interface"
exibir_usuario(1)
Cada camada tem uma responsabilidade isolada. A interface apenas consome o serviço, que por sua vez usa o repositório para acessar os dados. Isso permite evoluir ou testar cada parte de forma independente.