Versão
Idioma

Modelo de inicialização do módulo MVC

Este modelo pode ser usado para criar um módulo de aplicativo reutilizável com base nas melhores práticas e convenções de desenvolvimento do módulo. Também é adequado para criar microsserviços (com ou sem interface do usuário).

Como começar?

Você pode usar a ABP CLI para criar um novo projeto usando este modelo de inicialização. Como alternativa, você pode criar e fazer o download diretamente na página Introdução . A abordagem CLI é usada aqui.

Primeiro, instale a ABP CLI se você não tiver instalado antes:

dotnet tool install -g Volo.Abp.Cli

Em seguida, use o abp newcomando em uma pasta vazia para criar uma nova solução:

abp new Acme.IssueManagement -t module
  • Acme.IssueManagementé o nome da solução, como YourCompany.YourProduct . Você pode usar nomes de nível único, dois ou três níveis.

Sem interface de usuário

O modelo vem com uma interface do usuário do MVC por padrão. Você pode usar a --no-uiopção para não incluir a camada da interface do usuário.

abp new Acme.IssueManagement -t mvc-module --no-ui

Estrutura da solução

Com base nas opções especificadas, você obterá uma estrutura de solução ligeiramente diferente. Se você não especificar nenhuma opção, terá uma solução como a mostrada abaixo:

issuemanagement-module-solution

Projetos são organizados como src, teste hostpastas:

  • srcA pasta contém o módulo real, que é estratificado com base nos princípios DDD .
  • test pasta contém testes de unidade e integração.
  • hostA pasta contém aplicativos com configurações diferentes para demonstrar como hospedar o módulo em um aplicativo. Isso não faz parte do módulo, mas é útil no desenvolvimento.

O diagrama abaixo mostra as camadas e dependências do projeto do módulo:

módulo de dependências do projeto em camadas

Cada seção abaixo explicará o projeto relacionado e suas dependências.

Projeto .Domain.Shared

Este projeto contém constantes, enumerações e outros objetos. Na verdade, eles fazem parte da camada de domínio, mas precisam ser usados por todas as camadas / projetos da solução.

Um IssueTypeenum e uma IssueConstsclasse (que podem ter alguns campos constantes para a Issueentidade, como MaxTitleLength) são bons candidatos para este projeto.

  • Este projeto não depende de outros projetos na solução. Todos os outros projetos dependem disso direta ou indiretamente.

.Domain Project

Essa é a camada de domínio da solução. Ele contém principalmente entidades, raízes agregadas , serviços de domínio , tipos de valor , interfaces de repositório e outros objetos de domínio.

Uma Issueentidade, um IssueManagerserviço de domínio e uma IIssueRepositoryinterface são bons candidatos para este projeto.

  • Depende do .Domain.Sharedporque usa constantes, enumerações e outros objetos definidos nesse projeto.

.Application.Contracts Project

Este projeto contém principalmente interfaces de serviço de aplicativo e DTO ( Data Transfer Objects ) da camada de aplicativo. Existe para separar a interface e a implementação da camada de aplicação. Dessa forma, o projeto de interface pode ser compartilhado com os clientes como um pacote de contrato.

Uma IIssueAppServiceinterface e uma IssueCreationDtoclasse são boas candidatas para este projeto.

  • Depende do .Domain.Sharedporque ele pode usar constantes, enumerações e outros objetos compartilhados deste projeto nas interfaces de serviço de aplicativo e DTOs.

Projeto de Aplicação

Este projeto contém as implementações de serviço de aplicativo das interfaces definidas no projeto..Application.Contracts

Uma IssueAppServiceturma é uma boa candidata para este projeto.

  • Depende do .Application.Contractsprojeto para poder implementar as interfaces e usar os DTOs.
  • Depende do .Domainprojeto para poder usar objetos de domínio (entidades, interfaces de repositório ... etc.) para executar a lógica do aplicativo.

Projeto .EntityFrameworkCore

Este é o projeto de integração do EF Core. Ele define DbContexte implementa as interfaces de repositório definidas no .Domainprojeto.

  • Depende do .Domainprojeto para poder fazer referência a entidades e interfaces de repositório.

Você pode excluir este projeto se não desejar dar suporte ao EF Core para o seu módulo.

Projeto .MongoDB

Este é o projeto de integração do MongoDB.

  • Depende do .Domainprojeto para poder fazer referência a entidades e interfaces de repositório.

Você pode excluir este projeto se não quiser dar suporte ao MongoDB para o seu módulo.

Projetos de teste

A solução possui vários projetos de teste, um para cada camada:

  • .Domain.Tests é usado para testar a camada de domínio.
  • .Application.Tests é usado para testar a camada de aplicativo.
  • .EntityFrameworkCore.Tests é usado para testar a configuração do EF Core e os repositórios personalizados.
  • .MongoDB.Tests é usado para testar a configuração do MongoDB e os repositórios personalizados.
  • .TestBase é um projeto básico (compartilhado) para todos os testes.

Além disso, .HttpApi.Client.ConsoleTestAppé um aplicativo de console (não um projeto de teste automatizado) que demonstra o uso de APIs HTTP de um aplicativo Dotnet.

Projetos de teste são preparados para testes de integração;

  • É totalmente integrado à estrutura ABP e a todos os serviços em sua aplicação.
  • Ele usa o banco de dados SQLite na memória para o EF Core. Para o MongoDB, ele usa a biblioteca Mongo2Go .
  • A autorização está desabilitada, portanto, qualquer serviço de aplicativo pode ser facilmente usado em testes.

Você ainda pode criar testes de unidade para suas classes, que serão mais difíceis de escrever (porque você precisará preparar objetos simulados / falsos), mas mais rápidos de executar (porque apenas testa uma única classe e ignora todo o processo de inicialização).

Os testes de domínio e aplicativos estão usando o EF Core. Se você remover a integração do EF Core ou desejar usar o MongoDB para testar essas camadas, altere manualmente as referências do projeto e as dependências do módulo.

Projetos Anfitriões

A solução possui alguns aplicativos host para executar seu módulo. Aplicativos host são usados para executar seu módulo em um aplicativo totalmente configurado. É útil no desenvolvimento. Os aplicativos host incluem alguns outros módulos além do módulo que está sendo desenvolvido:

Os aplicativos host oferecem suporte a dois tipos de cenários.

Cenário de aplicativo único (unificado)

Se o seu módulo tiver uma interface do usuário, o .Web.Unifiedaplicativo será usado para hospedar a interface do usuário e a API em um único ponto. Ele possui seu próprio appsettings.jsonarquivo (que inclui a cadeia de conexão do banco de dados) e as migrações do banco de dados EF Core.

Para o .Web.Unifiedaplicativo, há um único banco de dados chamado YourProjectName_Unified(como IssueManagement_Unified para esta amostra).

Se você selecionou a --no-uiopção, este projeto não estará na sua solução.

Como correr?

Defina-o como o projeto de inicialização, execute o Update-Databasecomando para o EF Core no Package Manager Console e execute seu aplicativo. O nome de usuário padrão é admine a senha é 1q2w3E*.

Implantação separada e cenário de bancos de dados

Nesse cenário, há três aplicativos;

  • .IdentityServerapplication é um servidor de autenticação usado por outros aplicativos. Ele possui seu próprio appsettings.jsonque contém conexão com o banco de dados e outras configurações.
  • .HttpApi.Hosthospeda a API HTTP do módulo. Ele possui seu próprio appsettings.jsonque contém conexões com o banco de dados e outras configurações.
  • .Web.Hosthospedar a interface do usuário do módulo. Este projeto contém um appsettings.jsonarquivo, mas não possui uma cadeia de conexão porque nunca se conecta ao banco de dados. Em vez disso, ele contém principalmente o terminal do servidor de API remoto e o servidor de autenticação.

O diagrama abaixo mostra a relação dos aplicativos:

aplicativos de solução em camadas

.Web.HostO projeto usa a autenticação OpenId Connect para obter tokens de identidade e acesso para o usuário atual do .IdentityServer. Em seguida, usa o token de acesso para chamar o .HttpApi.Host. O servidor HTTP API usa autenticação de token de portador para obter declarações do token de acesso para autorizar o usuário atual.

Como correr?

Você deve executar o aplicativo com a ordem especificada:

  • Primeiro, execute o .IdentityServeraplicativo, pois outros aplicativos dependem dele.
  • Em seguida, execute o .HttpApi.Hostque é usado pelo .Web.Hostaplicativo.
  • Por fim, você pode executar o .Web.Hostprojeto e efetuar login no aplicativo usando admincomo nome de usuário e 1q2w3E*senha.
Esta página foi útil?
Por favor, faça uma seleção.
Obrigado pelo seu valioso feedback!

Observe que, embora não possamos responder aos comentários, nossa equipe usará seus comentários para melhorar a experiência.

Neste documento
Mastering ABP Framework Book
Dominando a estrutura ABP

Este livro o ajudará a obter uma compreensão completa da estrutura e das técnicas modernas de desenvolvimento de aplicativos da web.