Estamos tentando mover os dados da camada de serviço inchada para a camada de domínio usando uma abordagem DDD. Atualmente, temos muita lógica de negócios em nossos serviços, que está espalhada por todo o lugar e não se beneficia da herança.
Temos uma classe de domínio central, que é o foco da maior parte do nosso trabalho - um comércio. O objeto Trade saberá como precificar a si próprio, estimar riscos, validar a si próprio etc. Podemos então substituir condicionais por polimorfismo. Por exemplo: o SimpleTrade terá um preço próprio, mas o ComplexTrade terá um preço diferente.
No entanto, estamos preocupados que isso possa inchar as classes Trade. Realmente deve ser responsável por seu próprio processamento, mas o tamanho da classe aumentará exponencialmente à medida que mais recursos forem adicionados.
Portanto, temos opções:
- Coloque a lógica de processamento na classe Trade. A lógica de processamento agora é polimórfica com base no tipo de negociação, mas a classe Trade agora tem várias responsabilidades (preço, risco, etc.) e é grande
- Coloque a lógica de processamento em outra classe, como TradePricingService. Não é mais polimórfico com a árvore de herança Trade, mas as classes são menores e mais fáceis de testar.
Qual seria a abordagem sugerida?