...
Visão geral das estruturas e camadas:
...
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.
...
Esta camada deve ser independente de bibliotecas de terceiros ao máximo possível.
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. É recomendado o uso de uma ferramenta de mapeamento para mapear entidades para DTOs.
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 dependencias dependências com bibliotecas de terceiros das outras camadas.
O TNF usa e suporta Injeção de Dependência. Ele também fornece log e outros componentes reutilizáveis.