Domain

As regras de negócio na plataforma Devprime são isoladas em um projeto chamado “Domain”, seguindo os princípios do Domain-Driven Design (DDD). Isso resulta na simplificação da manutenção, desacoplamento, reuso e testabilidade, além de proporcionar previsibilidade em todos os projetos.

O Domain é o local onde as funcionalidades de negócio da aplicação são definidas e implementadas, garantindo uma organização clara e uma base sólida para o desenvolvimento.

Essas regras de negócio são desenvolvidas pelo próprio desenvolvedor do software utilizando C#/Csharp e seguem as práticas padronizadas do Domain Driven Design (DDD).

Devprime domain

Padronização das regras de negócio

A tecnologia da plataforma Devprime padroniza as regras de negócio seguindo os principais conceitos de Domain Driven Design (DDD) como Bounded context, Aggregate roots, Value Objects, Entity, Domain Events, Domain services, Application services, Handler baseados no Devprime Foundation.

Devprime domain

Estratégia baseada em Domain Driven Design (DDD)

A estratégia da Devprime Domain, além de padronizar o desenvolvimento, simplifica a entrada de novos desenvolvedores no projeto e a alternância para outros projetos, habilitamdo uma previsibilidade no desenvolvimento do software.

Domain
Context map Um mapa representando a interação entre os contextos de negócio
Bounded context Agrupamento de regras de negócio com responsabilidade comum em um contexto.
Aggregate roots Um contexto principal agrupando um conjunto de regras de negócio com todas as implementações autocontidas nele
Value Objects Objeto de negócio imutável e não possuem um identificador
Entity Objeto de negócio com um identificador e a capacidade de ser modificado.
Domain Events Estratégia para comunicar fatos de negócios
Core
Domain services Implementação de regras de negócio entre vários aggregates
Application services O primeiro nível de contato com os objetivos de negócio (Aggregate ou Domain services).
Handler Desempenha o papel de uma ponte de comunicação, reagindo a eventos de domínio e interagindo com as interfaces tecnológicas

Definição de tipos baseados no Devprime Foundation

O código-fonte das regras de negócio baseadas na plataforma Devprime é tipado nativamente em Domain-Driven Design (DDD), por meio das classes da Devprime Foundation. Isso possibilita validações através do Devprime CLI e a execução dos aceleradores da plataforma Devprime, os quais implementam comportamentos padrão, como exposição de APIs, testes, repositórios e outras implementações.

Visualizando uma classe do tipo “Aggregate root”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
namespace Domain.Aggregates.Order;
public class Order : AggRoot
{
    public string CustomerName { get; private set; }
    public string CustomerTaxID { get; private set; }
    public IList<Item> Items { get; private set; }
    public double Total { get; private set; }
    public void AddItem(Item item)
    {
        if (item != null && Items != null)
        {
            var myItems = Items.Where(p => p.SKU == item.SKU).FirstOrDefault();
            if (myItems != null)
                myItems.Sum(item.Amount);
            else
                Items.Add(item);
        }
    }
}

Visualizando uma classe do tipo “Aggregate Entity”

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
namespace Domain.Aggregates.Order;
public class Item : Entity
{
    public string Description { get; private set; }
    public int Amount { get; private set; }
    public string SKU { get; private set; }
    public double Price { get; private set; }
    public double GetSubTotal()
    {
        return Amount * Price;
    }
    public void Sum(int amount)
    {
        Amount += amount;
    }
}

Última modificação October 26, 2023 (795e8af6)