A arquitetura multicamadas é uma técnica largamente aceita pelo mercado de desenvolvimento de software a fim de reduzir a complexidade e aumentar o reuso de código. Para entregar uma arquitetura multicamadas o TOTVS .NET Framework (TNF) segue os princípios do Domain Driven Design (DDD):
Visão geral das estruturas e camadas:
Apresentação | View Models (Javascript), Views (HTML/CSS) Localização, Navegação, Notificação |
Web | Web API Controllers, OData, ASP.NET Core |
Aplicação | DTOs, DTO Mappers Autorização, Sessão, Auditoria |
Domínio | Entidades, Objetos de Valor, Repositórios, Serviços de Domínio Unidade de Trabalho (UoW), Eventos de Domínio |
Infraestrutura | ORM (EntityFramework Core), MongoDB, Carol Backgroud Jobs |
Outros |
Uma camada pode ser implementada em um ou mais assemblies. Também podem existir contextos de negócio onde cada um pode ter as suas próprias camadas.
Esta camada contém os serviços que são utilizados pela camada de apresentação. Um serviço desta camada pode receber um DTO (Data Transfer Object) como entrada, utilizá-lo para executar alguma operação da camada de domínio e retornar outro DTO, se necessário. Ela não deve receber ou retornar entidades. Validação da entrada de usuário é implementada nesta camada.
Na camada de domínio é onde todas as regras de negócio devem ser implementadas.
Entidades representam os dados e operações de negócio de um domínio. Geralmente, mas não somente, elas são mapeadas para tabelas do banco de dados.
Repositórios são coleções de objetos e são utilizados para recuperar e gravar entidades na fonte de dados (banco de dados). A camada de domínio define os repositórios, mas não os implementam. Sua implementação deve ficar na camada de infraestrutura.
Unidade de Trabalho (UoW) é um padrão de projeto utilizado para gerenciar a conexão com o banco de dados e suas transações, acompanhar as mudanças em uma entidade e armazená-las na fonte de dados. É definida na camada de domínio, mas implementada na camada de infraestrutura.
Serviços de Domínio trabalham com entidades e outros objetos de domínio e implementam regras de negócio que não pertencem a uma única entidade.
Esta camada deve ser independente de bibliotecas de terceiros ao máximo possível.
Enquanto a camada de domínio define os contratos para repositórios, unidade de trabalho e outros serviços, a camada de infraestrutura implementa esses contratos. Ela implementa os repositórios utilizando ferramentas de ORM como EntityFramework. O TNF fornece classes base para trabalhar com o EntityFramework Core. Esta camada é utilizada para abstrair as dependências com bibliotecas de terceiros das outras camadas.