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
Print Friendly and PDF

Sem comentários:

Com tecnologia do Blogger.