Arquitectura por camadas em aplicações ASP.NET Core
Numa arquitectura por camadas, os blocos (Controller, View e Model) da framework ASP.NET MVC fazem parte da camada de apresentação.
No entanto, hoje em dia as aplicações web são construidas com AngularJS ou ReactJS do lado do cliente e ASP.NET Core (Web API) do lado do servidor. O que é, então, a camada de apresentação neste tipo de arquitectura?
Esta arquitectura tem as seguintes camadas:
- Apresentação
- Serviço
- Lógica de Negócio/Núcleo da aplicação
- Acesso a dados/Persistência
Camada de apresentação
Esta camada compreende as componentes, templates e modelos de AngularJS definidos na aplicação AngularJS. Estes são os artefactos da camada de apresentação.Camada de Serviço
No âmbito de uma arquitectura por camadas, o serviço funciona como um wrapper da aplicação e disponibiliza as funcionalidades através de uma API com a qual a UI pode interagir. Esta camada vem fazer a ponte entre a camada de apresentação e a camada de negócio. Trata-se de serviços lógicos.Portanto, a camada de serviço está repartida por duas componentes físicas: o cliente (os serviços HTTP do AngularJS) e o servidor (os controllers do ASP.NET Core). Os serviços do AngularJS e os controllers do ASP.NET Core são bastante coesos. Os métodos destes serviços comunicam directamente com os endpoints dos controllers do ASP.NET Core. Ex: MyService.getDataList().
app.service('MyService', function () {
this.getDataList = function () {
//...
$.ajax({
type : 'POST',
//...
};
});
Camada da lógica de negócio
Os controllers do ASP.NET Core usam as interfaces com o(s) repositório(s), as classes de domínio e os serviços. Estes são os artefactos da camada de negócio.É aqui que está o núcleo da aplicação, independente quer da framework de apresentação quer da framework de persistência.
A implementação dos repositórios é da responsabilidade da camada de acesso a dados.
Os serviços são responsáveis pela orquestração. Exemplo:
PhotoService.AddPhoto()
//...
// Save file
var uploadsPath = Path.Combine(host.WebRoot, "uploads");
if (!Directory.Exists(uploadsPath))
Directory.CreateDirectory(uploadsPath);
var fileName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName);
var filePath = Path.Combine(uploadsPath, fileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
file.Copyto(stream);
}
// Add a record to the repository
var photo = new Photo { FileName = fileName };
photoRepository.Add(photo);
unitOfWork.Complete();
Isto é separação de conceitos. E temos a Clean Architecture do Uncle Bob.
Camada de acesso a dados
Esta camada é responsável pela persistência. É aqui que temos as frameworks O/RM (no caso da Entity Framework, o DbContext pertence a esta camada) e a implementação das software patterns Unit Of Work e Repository.Ver aqui vídeo com a implementação das software patterns Repository e Unit Of Work usando a Entity Framework.
Relacionados:
A POPULARIDADE DO ANGULARJS
.NET CORE E ASP.NET 5 (COM TUTORIAL)
ANGULARJS: SERVICE VS FACTORY
fonte: Programming with Mosh
Licença CC BY-SA 4.0
Silvia Pinhão Lopes, 23.7.17
Sem comentários: