Arquitetura da solução

Introdução

  • A arquitetura da solução determina um fluxo de desenvolvimento que facilita a compreensão do desenvolvedor, agilizando o processo de concepção do projeto, manutenção e melhoria contínua. Uma arquitetura pode ser definida por um padrão a ser absorvido por toda a empresa ou de acordo com a necessidade do projeto em questão, pode conter padrões de projeto, que são algumas boas práticas conhecidas para diversos tipos de solução, ou algum padrão determinado pela empresa pela qual o projeto será desenvolvido, desde que tenha como objetivo, simplificar o entendimento, e agilizar a manutenção.
  • A arquitetura escolhida para o projeto Merenda.online consiste em bibliotecas de classes desacopladas, sendo que cada uma tem o seu papel definido na solução, cada biblioteca poder ser mantida separadamente. O objetivo principal dessa separação é a manutenção posterior a entrega, ou seja, as correções, alterações ou inclusões de funcionalidades, dessa forma com o projeto em camadas fica claro o fluxo de classes a serem alteradas para que a demanda seja entregue, uma outra necessidade dessa divisão, é permitir a cobertura dos testes unitários das bibliotecas desacopladas como modelos de dados e serviço.

Requisitos da Arquitetura

  • É premissa da arquitetura escolhida a abstração das classes de domínio sendo o core do sistema, dessa forma implementando conceitos das boas praticas de DDD (Domain Driven Development) a camada de dados fica responsável pelas entidades e suas regras de negócio e a camada de serviço gerencia as regras de negocio.
  • O template de projeto utilizado para o projeto web, é o ASP.NET MVC no qual a camada model é responsável pela comunicação do controle com a visão, a camada visão é responsável pela a interface com o usuário e o controle é responsável por gerenciar as requisições web.

Camadas da Arquitetura

Classes de Domínio

Camada principal da arquitetura, armazena todos objetos do projeto e o mapeamento POCO (Code First) do ORM Entity Framework, responsável por armazenar a regra de negocio de cada entidade, essa camada não depende de nenhuma outra camada.

Classes de Repositório

Camada pretende criar uma abstração entre a camada de domínio e a lógica de negócio, um repositório genérico consulta a fonte de dados para os dados, mapeia os dados da fonte de dados para uma entidade e persiste as mudanças na entidade para a fonte de dados.

Classes de Serviços

Camada com os serviços responsáveis pela comunicação entre a interface com o usuário e o repositório. Responsável por gerenciar as regras de negócio das entidades.

Interface do Usuário

Camada mais externa da aplicação. Nessa camada é armazenada as validações e regras de negócio na visão do usuário, também implementado a inversão de dependência construindo assim uma aplicação menos acoplada comunicando com as outras camadas por interface.

Implementação da Arquitetura

School.Model

* Essa é a camada principal da solução, dessa forma a solução deve ser baseada em seus domínios e negócio a partir da implementação dessa camada.

Dependência de API igual ou maior:

* Como pode ser observado, no conceito de DDD, o projeto de domínio no caso School.Model não deve depender de outras implementações que não sejam base de uma classe c#, como bibliotecas de terceiros.

School.Repository

Camada com a responsabilidade de armazenar as classes de repositório e o contexto de dados. Para utilizar o ADO.NET Entity Framework Code First é necessário criar um contexto de acesso a dados herdando da classe DBContext.

Nessa classe é sobrescrito o método OnModelCreating(), esse método é chamado quando o modelo (schoolContext) foi inicializado e antes de ser finalizado, dessa forma ainda pode ser configurado, no caso instanciando o mapeamento de cada entidade.

School.Business

As lógicas do negócio até então implementadas no modelo são gerenciadas no projeto business.

School.Web

Camada externa da solução pela qual o usuário irá interagir com a aplicação. Criada uma Aplicação Web ASP.NET MVC. Essa camada comunica com a School.Service.

Para serem utilizados como serviço as propriedades como contexto, uma fabrica de objeto deve ser criada e mantida para que o serviço esteja disponível.

Assim os serviços podem ser utilizados no controle das entidades.

View Model

Camada responsável por armazenar as validações a nível de usuário.

View

Camada responsável pela interface com o usuário. Para o projeto Merenda.online foi definida a utilização do componente Devexpress e Devextreme, uma biblioteca com componentes javascript que permite serem manipulados.

Dependências de API igual ou maior:

Controller

Dependências de API igual ou maior:

Camada responsável por gerenciar as requisições web. Com objetivo de manter a relação entre as validações da entidade e as validações de usuário implementadas no ViewModel.

School.Tests

A finalidade do projeto é cobrir o máximo possível de operações das entidades, como validações de domínio e serviços.

Dependências de API igual ou maior:

 
softwares/schoolweb/requisitos/documentacao_tecnica/arquitetura/arquitetura_solucao.txt · Última modificação: 01/12/2021 11:52 (edição externa)
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki