DDD -
Lógica de negócios e exceções em
entidades
![]() |
Hoje veremos como lidar com lógica de negócios e exceções em entidades na abordagem do Domain Driven Design. |
A lógica de negócios, como validações, cálculos ou transições de estado, pode ser implementada nas entidades para garantir a integridade e a consistência do domínio.
Vejamos um exemplo de entidade Order em um sistema de comércio eletrônico. A entidade Order pode ter diversas regras de negócios associadas a ela, como garantir que o pedido tenha um cliente válido, contenha pelo menos um item ou atenda a determinados critérios de processamento.
public class Order
{
public int Id { get; set; }
public Customer Customer { get; set; }
public List<OrderItem> Items { get; set; }
public void AddItem(OrderItem item)
{
if (item == null)
{
throw new ArgumentNullException(nameof(item));
}
// lógica adicional para validação do item
Items.Add(item);
}
// Outros métodos e propriedades
}
|
A seguir temos algumas diretrizes para lidar com lógica de negócios em entidades :
Tratamento de exceções
As exceções desempenham um papel crucial no tratamento de erros e na notificação
dos clientes sobre cenários excepcionais. No DDD, exceções podem ser usadas para
comunicar erros específicos de domínio ou violações de regras de negócios.
Continuando com nosso exemplo de entidade Order,
vamos considerar um cenário onde o pedido deve ter um valor total mínimo para
processamento. Se o pedido não atender a esses critérios, podemos lançar uma
exceção personalizada para indicar a violação.
public class InsufficientOrderValueException : Exception
{
public InsufficientOrderValueException(string message) : base(message)
{
}
}
public class Order
{
public void Process()
{
decimal totalValue = CalculateTotalValue();
if (totalValue < minimumValue)
{
throw new InsufficientOrderValueException("O pedido não atende o valor mínimo.");
}
// processa o pedido
}
// outros métodos
}
|
No trecho de
código acima, definimos uma exceção personalizada
InsufficientOrderValueException para representar a violação específica.
Dentro do método Process calculamos o valor total
do pedido e verificamos se atende ao requisito mínimo. Caso contrário, lançamos
a exceção personalizada com uma mensagem de erro apropriada.
Ao usar exceções personalizadas, podemos diferenciar entre diferentes tipos de
erros e tratá-los adequadamente em nosso aplicativo ou propagá-los ao cliente
para ações apropriadas.
A seguir temos algumas diretrizes para lidar com exceções em entidades:
Lembre-se de que a consistência do domínio é crucial, e a maneira como você projeta a lógica de negócios e trata as exceções deve refletir a compreensão profunda do domínio e das regras que regem o sistema.
Assim, no Domain-Driven Design (DDD), a camada de domínio é o coração da aplicação, onde reside a lógica de negócios e as regras que definem o comportamento e a semântica do domínio. Portanto, realizar o tratamento de exceções na camada de domínio é uma abordagem coerente por várias razões:
Entretanto é importante ressaltar que nem todas as exceções devem ser tratadas no domínio. Erros de infraestrutura, como problemas de conexão de banco de dados ou falhas de rede, são geralmente tratados em camadas superiores, como a camada de aplicação ou a camada de apresentação, pois essas camadas são responsáveis por lidar com as complexidades técnicas da aplicação.
E estamos
conversados...
"E (Jesus) os ensinava, dizendo: Não está escrito: A minha casa será chamada,
por todas as nações, casa de oração? Mas vós a tendes feito covil de ladrões."
Marcos 11:17
Referências:
C# - Calculando a diferença entre duas datas
NET - Padrão de Projeto - Null Object Pattern
C# - Fundamentos : Definindo DateTime como Null ...
C# - Os tipos Nullable (Tipos Anuláveis)