.NET - Usando uma arquitetura em camadas lógicas (n-layer) - I
Neste tutorial veremos como criar uma aplicação usando a arquitetura em 3 camadas lógicas ou 3-layer. |
Atualmente muito tem se escrito e falado sobre Microservices, Domain Drive Design, Clean Architecture , e isso é muito bom, pois indica que a comunidade esta atingindo um nível de maturidade rumo a excelência.
A complexidade destes temas no entanto pode deixar confuso quem esta iniciando agora e não acompanhou o processo de evolução que nos conduziu até hoje. Assim o objetivo deste artigo é apresentar a utilização na plataforma .NET da arquitetura em 3 camadas lógicas ou 3-layer que é uma abordagem tradicional e já muito discutida pela comunidade.
Assim o primeiro esclarecimento que irei fazer será com relação ao termo Camada que é traduzido a partir de Tier ou Layer.
Camada : Tiers ou Layers ?Na literatura encontram-se com frequência os termos tiers e layers, em inglês, que geralmente são traduzidos como camadas.
Olhando com atenção, embora a diferença seja bem sutil, compreende-se que tiers refere-se a uma separação física dos componentes (diferentes Assemblies, DLLs, arquivos), enquanto layers aponta para uma separação lógica dos componentes com classes distintas e diferentes espaços de nomes.
As vantagens da abordagem em Camadas
De forma bem simples, o desenvolvimento em camadas procurar dividir a funcionalidade, componentes e o código para uma aplicação, seja para web ou para desktop, em camadas distintas apresentando as seguintes vantagens:
Cada camada esta em um componente isolado;
Cada camada depende apenas da camada seguinte ;
Permite alterações em qualquer uma das camadas sem interferir nas outras camadas;
Potencia a separação das responsabilidades;
Permite a especialização da equipe de desenvolvimento de software;
Facilita a manutenção do código;
Facilita a reutilização do código;
Fácil de transferir e distribuir;
Dessa forma, independente de se usar uma arquitetura em camadas com separação lógica (Layers) ou com separação física (Tiers) a utilização de uma arquitetura em camadas (mais de uma camada) sempre será melhor que usar apenas uma única camada.
O que é uma arquitetura em camadas (3-layer) ?
Aqui o termo Camada significa uma porção reutilizável de código que realiza uma tarefa específica. No ambiente da plataforma .NET, uma camada é usualmente definida como um projeto que representa esta função específica.
Nesta abordagem as
'camadas' indicam a separação lógica dos componentes. A arquitetura em
camadas lógicas concentra-se no agrupamento de funcionalidades relacionadas
dentro de um aplicativo em camadas distintas que são empilhadas verticalmente
umas sobre as outras. Cada camada possui namespaces
e classes exclusivas.
Um aplicativo 3-Camadas pode residir no mesmo
computador físico (mesma camada física) e, os
componentes de cada camada se comunicam com os componentes de outra camada por
interfaces bem definidas.
Em C#, cada camada é frequentemente implementada usando o template
Class Library em um arquivo
DLL - Dynamic Link Libraries.
De forma geral em uma arquitetura em 3-Camadas lógicas
temos as seguintes camadas definidas:
1- Camada de apresentação (Presentation Layer - UI)
É a primeira e a camada superior presente no aplicativo onde os usuários podem
interagir com o aplicativo.
2- Camada de lógica de negócios (Business Logic Layer -
BLL)
Esta é a camada intermediária - o coração do aplicativo. Ele contém toda a
lógica de negócios do aplicativo, descreve como os objetos de negócios interagem
entre si, onde a camada de apresentação e a camada de acesso a dados podem se
comunicar indiretamente.
3- Camada de acesso a dados (Data Access Layer - DAL )
A camada de acesso a dados impõe regras relativas ao acesso aos dados,
fornecendo acesso simplificado aos dados armazenados em armazenamento
persistente, como o SQL Server.
Vale ressaltar que essa camada se concentra apenas no acesso aos dados, em vez
de armazenamento de dados. Isso pode criar um pouco de confusão com a camada de
dados na arquitetura de 3 camadas com separação física.
Como a arquitetura em 3 camadas lógicas funciona
Nesta abordagem, a camada de apresentação não se comunica diretamente com a camada de acesso a dados. A camada de lógica de negócios funciona como uma ponte entre a camada de apresentação e a camada de acesso a dados.
A seguir temos um
fluxo de funcionamento desta arquitetura:
1-
A camada de apresentação é a única camada que interage diretamente com o
usuário. É usada principalmente para apresentar/coletar dados de usuários e,
em seguida, transferi-los para a camada de lógica de negócios para processamento
posterior.
2-
Depois de receber informações da camada de apresentação, a camada de lógica de
negócios faz alguma lógica de negócios nos dados. Durante esse processo, essa
camada pode recuperar ou atualizar alguns dados do banco de dados do aplicativo.
No entanto, essa camada não se responsabiliza pelo acesso ao banco de dados; ele
envia solicitações para a próxima camada, a camada de acesso a dados.
3-
A camada de acesso a dados recebe solicitações da camada de lógica de negócios e
cria algumas consultas ao banco de dados para lidar com essas solicitações.
Assim que a execução é concluída, ele envia o resultado de volta para a camada
de lógica de negócios.
4-
A camada de lógica de negócios obtém respostas da camada de acesso a dados,
conclui o processo e envia o resultado para a camada de apresentação.
5-
A camada de apresentação obtém as respostas e as apresenta aos usuários por meio
de componentes de UI.
O diagrama abaixo ilustra como funciona a arquitetura de 3 camadas.
Como construir e implantar uma aplicação em 3 camadas lógicas na plataforma .NET ?
A título de
exemplo vamos definir uma Solução Tarefas para gerenciar atividades onde podemos
criar os seguintes projetos :
- Tarefas.Domain - Objetos de negócios - Entidades
(DTOs - Objetos de Transferência de Dados) : Class Library .NET Core
- Tarefas.Infrastructure - Camada de Acesso a
Dados: Class Library .NET Core
- Tarefas.Service - Camada de Lógica de negócios : Class Library .NET Core
- Tarefas.Web - Camada de Apresentação: ASP.NET
Core 5.0 MVC
A camada Domain - Objetos de Negócios inclui objetos que são usados no aplicativo e
funções auxiliares comuns (sem lógica) usadas para todas as camadas. Em
uma arquitetura de 3 camadas, esta camada é opcional. No entanto, podemos reduzir o código
e assim usar uma camada para manter os códigos que sejam comuns em vez de mantê-los em cada
camada é essencial para isso.
A figura a seguir
apresenta o esquema da arquitetura em 3 camadas :
O desafio que a arquitetura em 3 camadas cria, é que ela não define explicitamente a responsabilidade de cada camada, o fluxo direcional de informações ou identifica as dependências. Normalmente, ela também apresenta forte acoplamento de componentes, portanto, as alterações em uma camada geralmente exigirão alterações nas outras. Isso reduz os benefícios da programação modular, que valoriza a implantação e o gerenciamento independentes de serviços.
Considerando esses quesitos existem abordagens mais robustas e desacopladas como a Hexagonal Architecture, a Onion Architecture e a Clean Architecture.
Assim a
arquitetura em 3 ou N camadas se presta a implementações tradicionais de
cliente/servidor, mas não é adequada para implantações de aplicações na nuvem
mais modernas ou para o desenvolvimento de microsserviços. Em vez disso,
considere arquitetura em camadas como um degrau de aplicativos monolíticos
para implantações de nuvem híbrida.
As arquiteturas Hexagonal e Cebola são semelhantes,
e os arquitetos que trabalham com microsserviços tendem a favorecer
o modelo limpo, graças à sua natureza centrada no serviço. A coisa mais
importante a lembrar é que você precisa considerar sua escolha de modelo com
cuidado - é difícil trocar o cavalo no meio do rio.
Criando a solução e os projetos
Vamos criar a solução e os projetos usando a arquitetura em 3 camadas. A título de exemplo nossa aplicação vai gerenciar informações sobre atividades ou tarefas.
Abra o VS 2019 Community clique em new Project e selecione o template Blank Solution informando o nome Tarefas.
Com isso teremos uma solução em branco onde vamos criar os projetos.
A seguir no menu File clique em Add-> New Project e selecione o template Class Library e informe o nome Tarefas.Domain a seguir clique em Create.
Repita o procedimento acima e crie os projetos Tarefas.Infrastructure e Tarefas.Service ambos do tipo Class Library.
Vamos agora criar o último projeto que será um projeto que vai usar o template ASP.NET Core Web App (Model-View-Controller) com o nome Tarefas.Web.
Defina as opções conforme mostra a figura a seguir e clique no botão Create:
Ao final teremos a solução Tarefas e os projetos exibidos na janela Solution Explorer conforme abaixo:
Com isso estamos prontos para iniciar o desenvolvimento definindo o código em cada camada. Como isso é uma tarefa que eu já mostrei em outros artigos vou deixar os links abaixo para acompanhamento:
São mais de dez artigos abordando a criação de uma aplicação em camadas usando VB .NET, C#, SQL Server e MySql.
Na próxima parte do artigo vamos apresentar a Clean Architecture e comparar com a arquitetura em Camadas.
"Toda a Escritura é divinamente inspirada, e proveitosa para ensinar, para
redargüir, para corrigir, para instruir em justiça;"
2 Timóteo 3:16
Referências:
ASP.NET Core Web API - Tratamento de erros
ASP .NET Core MVC - Tratamento de exceções - II
ASP .NET Core - Implementando a segurança com ...