Humanizer
Importante
O exemplo a seguir utiliza a biblioteca Humanizer, mas você pode utilizar a biblioteca que desejar, o foco neste momento é o entendimento de como o Devprime habilita o uso de extensões e como integrá-las em seu projeto sem ferir os princípios de arquitetura estabelecidos, garantindo separação de responsabilidades e desacoplamento.
Criando um microserviço para utilizar no exemplo
Nós utilizaremos um microsserviço baseado na plataforma Devprime
- Utilize uma conta ativa no Devprime e ative o Devprime CLI.
- Inicie os containers pelo Docker (MongoDB e RabbitMQ)
- Crie a fila customerevents no RabbitMQ.
Digite o comando abaixo em um diretório de sua preferência e em seguida abra o projeto no Visual Studio, VSCODE ou sua IDE de preferência:
dp new customer --stream rabbitmq --state mongodb
Acesse a pasta raiz do projeto: .\customer\
Implementações de domínio
Nós precisamos incluir um aggregate root
para compor as funcionalidades de negócio do nosso contexto, sendo assim, digite o seguinte comando em seu terminal:
dp add aggregate Customer
O CLI deverá criar a classe Customer.cs
onde iremos incluir nossas primeiras regras de negócio. Abra o caminho: code .\src\core\domain\aggregates\customer\Customer.cs
e inclua as propriedades conforme exemplo abaixo:
|
|
Acelerando implementações com o CLI
O próximo passo será utilizar o CLI para acelerar as grande parte das implementações necessárias e para isso digite o comando abaixo em seu terminal:
dp init
O CLI solicita autorização para alterar os arquivos necessários da solution, neste caso vamos digitar A
para autorizar todos os arquivos.
Acesse novamente o aggregate root
no caminho: code .\src\core\domain\aggregates\customer\Customer.cs
e altere o método Add() conforme o exemplo a seguir:
|
|
Ainda no aggregate root
altere o método ValidFields() removendo a validação referente ao campo OrdinalCreationDate
como mostra o exemplo a seguir:
|
|
Adicionando uma extension
Nós vamos incluir agora a classe HumanService
que será a nossa extension, através do seguinte comando do Devprime CLI.
dp add extensions HumanService
O CLI solicita autorização para alterar os arquivos necessários da solution, tecle A
para autorizar todos os arquivos.
A imagem a seguir mostra a classe HumanService
e sua Interface IHumanService
, cuja responsabilidade será implementar as integrações com a biblioteca Humanizer.
Ela mostra também a classe Extensions
e a interface IExtensions
cuja finalidade é ser um proxy que permite ao contexto de execução do Devprime Pipeline, acessar todas as extensions disponíveis na aplicação via injeção de dependência.
`
Adicionando a referência para a biblioteca Humanizer
Nós vamos incluir a biblioteca Humanizer em nosso projeto, lembre-se de definir o destino de instalação para o projeto “Devprime.Extensions”. code .\src\adapters\extensions\Devprime.Extensions.csproj
Via dotnet CLI
dotnet add .\src\adapters\extensions\Devprime.Extensions.csproj package Humanizer
Rode também o dotnet build
no projeto. (Lembre-se de estar na pasta raíz do projeto .\customer\
):
dotnet build
Implementando a integração com a biblioteca Humanizer
Nós vamos alterar a interface “IHumanService” existente no caminho code .\src\core\application\interfaces\adapters\extensions\IHumanService.cs
, incluindo a assinatura de método a seguir:
|
|
Nós também precisamos implementar o método na classe “HumanService” code .\src\adapters\extensions\humanservice\HumanService.cs
, deixando-a conforme segue:
|
|
Implementado a chamada ao adapter de extension
O nosso cenário envolve um evento de domínio chamado “CustomerCreated” e associado a ele temos um EventHandler chamado “CustomerCreatedEventHandler”, que possui uma chamada ao Devprime State Adapter para persistência dos dados (linha 11) e emite um evento externo à aplicação (linha 26).
Caminho: code .\src\Core\Application\EventHandlers\Customer\CustomerCreatedEventHandler.cs
|
|
Altere o código do nosso EventHandler conforme modelo abaixo (vide linhas destacadas):
|
|
Testando a aplicação
Agora que temos as implementações necessárias, vamos rodar o microsserviço através do comando abaixo:
Windows
.\run.ps1
Linux / Mac
.\run.sh
No browser, acesse o link: https://localhost:5001/swagger
, nós vamos utilizar o método POST para criar um novo customer:
`
Utilize o Request Body abaixo:
|
|
Ainda na API utilize o endpoint de GET para obter os customers cadastrados (não necessita passar nenhum parâmetro), o resultado do Response Body
deve ser similar ao seguinte:
|
|