Order
Exemplo de implementação da Model Order
para utilização no Serviço de Aplicação.
A estrutura padrão do projeto “Application” inicia com uma pasta chamada “EventHandlers” e um arquivo “EventHandlers.cs” para registro e mapeamento do “Domain Event” com o “Event Handler”.
Ao acionar um “Domain Event” na regra de negócio um “Event Handler” será acionado com o código que interage com a camada de tecnologia.
Além disso, há uma pasta para inclusão das Interfaces, que neste contexto inclui apenas o arquivo “IExtension.cs”, responsável por habilitar customizações do projeto por meio do Adapter Extensions.
O arquivo Application.csproj
traz as configurações padrões do projeto e não é necessário incluir nenhuma dependência adicional. De acordo com a estratégia de arquitetura, esse projeto possui uma referência ao projeto Domain
para conexão com as regras de negócio do projeto.
O parâmetro Version
deve ser atualizado pela estratégia de DevOps com o ID da nova versão da aplicação do microsserviço.
A referência relacionada a Devprime Stack
deve ser a mesma em todos os projetos, e você pode atualizá-la automaticamente executando o comando dp stack
, disponibilizado pelo Devprime CLI e executado na pasta principal do projeto.
|
|
Um dos pilares importantes oferecidos pela plataforma Devprime é a padronização do desenvolvimento do software e nesse momento no projeto Application já é possivel acompanhar algumas estratégias de organização de pastas e arquivos que permitem escalar as equipes de desenvolvimento de forma padronizada.
O exemplo abaixo retrata um exemplo de inclusão de um “Application Services” que recebe um evento em uma API e um repositório do MongoDB utilizando o Adapter de State. Esse procedimento pode ser manual implementando cada pasta e arqivo ou utilizando o comando dp init
oferecido pelo Devprime CLI que analisa as regras de negócio no Domain
e faz as implementações.
Itens importantes:
O projeto de Application funciona como uma camada de transporte nessa estratégia onde a arquitetura de software é desacoplada e a conexão acontece por meio de uma estratégia de inversão de dependência (DI).
#1 - Implementando os models Order.cs / Item.cs
Na estrutura da plataforma Devprime, a pasta para a implementação dos “Models” para os “Application Services” está localizada em “Core > Application > Services” e são utilizados para padronização dos parâmetros e mapeamentos.
Um exemplo comum encontrado nas implementações dessas Models é o relacionamento com objetos de negócio presentes no projeto Domain conforme representado no bloco de código abaixo. Utilizando essa abordagem o “Domain” não conhece o “Application”.
|
|
Para mais detalhes explore os dois modelos abaixo:
#2 - Implementando a Interface IOrderService.cs
Na estrutura da plataforma Devprime, a pasta para a implementação das interfaces dos “Application Services” está localizada no projeto “Application” em “Core > Application > Interfaces > Services”. No exemplo abaixo, estamos demonstrando os métodos “Add / Update / Delete / Get / GetAll”.
|
|
#3 - Implementando o Application Service OrderService.cs
Na estrutura da plataforma Devprime, a pasta para a implementação dos “Application Services” no projeto Application está em “Core > Application > Services”. No exemplo abaixo, estamos reproduzindo um exemplo de implementação do método “Add” onde ele recebe o command, converte no modelo de dominio. Ao utilizar a instrução Dp.Attach(order)
ela adiciona o objeto ao “Devprime Pipeline” e depois executada o metodo Add.
|
|
#4 - Implementação dos Handlers CreateOrderEventHandler.cs
e OrderCreatedEventHandler.cs
Na estrutura da plataforma Devprime, para manter o desacoplamento, as regras de negócio não se comunicam diretamente com as tecnologias. Em vez disso, são implementados os “Handlers” em “Core > Application > EventHandlers”, que são usados para habilitar o código que reage a um fato de negócio (“Domain Event”), por exemplo, Dp.ProcessEvent<bool>(new CreateOrder())
, emitido dentro do Domain.
Exemplo de implementação do Handler: CreateOrderEventHandler.
O código de exemplo demonstra a persistência de um Aggregate em um banco de dados por meio da interação com o Adapter de State. Essa implementação tecnológica no Application está isolada do Domain.
|
|
Exemplo de implementação do Handler: OrderCreatedEventHandler.
O código de exemplo habilita a emissão de um evento permitindo a comunicação de um fato de negócio externamente ao microsserviço, por meio da interação com o Adapter de Stream, que se integra de forma transparente com o RabbitMQ, Kafka e outras plataformas. Essa implementação tecnológica no Application está isolada do Domain.
|
|
#5 - Implementando models utilizados no Event Handlers
Na estrutura da plataforma Devprime, a pasta para a implementação dos “Models” para os “EventHandlers” está localizada no em “Core > Application > EventHandlers > Order > Model” e são utilizadas na comunicação com os Adapters.
|
|
|
|
#6 - Registrando os Handles para Domain Events EventHandler.cs
Na camada de Application em “Core / Application / EventHandlers” estará disponivel um HUB para registro dos Handles que estarão interceptando os eventos de dominio e estabelecendo um relacionamento entre ambos.
|
|
#7 - Implementando a Inferface IOrderState.cs
A camada de aplicação também desempenha um papel importante registrando interfaces para interação com outros Adapters, como o State. As interfaces estão organizadas na estrutura de pastas “Core > Application > Interfaces > Adapters”, e, de acordo com esse contexto, utilizaremos uma pasta específica para o Adapter.
|
|
Exemplo de implementação da Model Order
para utilização no Serviço de Aplicação.
Exemplo de implementação da Model Item
para utilização no Serviço de Aplicação.