Se você é forçado a usar um modelo de domínio anêmico, onde coloca sua lógica de negócios e campos calculados?

Nossa ferramenta de O / RM atual não permite realmente modelos de domínio sofisticados, portanto somos forçados a utilizar entidades anêmicas (DTO) em qualquer lugar. Isso funcionou bem, mas continuo lutando com onde colocar a lógica comercial básica baseada em objetos e os campos calculados.

Camadas atuais:

ApresentaçãoServiçoRepositórioDados / Entidade

Nossa camada de repositório possui a maior parte da lógica básica de buscar / validar / salvar, embora a camada de serviço faça muitas das mais complexas validações e salvamentos (uma vez que as operações de salvamento também fazem log, verificação de permissões, etc.). O problema é onde colocar código como este:

Decimal CalculateTotal(LineItemEntity li)
{
  return li.Quantity * li.Price;
}

ou

Decimal CalculateOrderTotal(OrderEntity order)
{
  Decimal orderTotal = 0;
  foreach (LineItemEntity li in order.LineItems)
  {
    orderTotal += CalculateTotal(li);
  }
  return orderTotal;
}

Alguma ideia?

questionAnswers(7)

yourAnswerToTheQuestion