...
...
...
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 |
...
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 camadasOs próximos tópicos abordam como você pode utilizar o TNF para criar essa estrutura de maneira mais prática e objetiva, seguindo as melhores práticas de desenvolvimento possíveis.