Executando verificação de segurança...
3

Como lidar com relações no DDD?

Olá pessoal, tudo bem?

Sou o Henrique, sou programador a uns 2~3 anos, comecei com Rails e a um ano atrás comecei a trabalha com node.js.
Por volta de uns 6 meses, começamos a implementar DDD no nosso projeto.

Estou confortável, e sinto que o DDD tem sido ótimo para o projeto, porém estou tendo muitas dificuldades em como trabalho as relações entre entidades.

Estou trabalhando com aggregationRoot e ValueObjects, porém sinto que não ficam boas na prática, quando realmente preciso delas no código (provavelmente por falha minha na implementação).

Vou deixar dois exemplos práticos do meu dia a dia, e gostaria de ideia de qual caminho posso seguir:

1- Tenho uma entidade "Inscrição", e essa entidade deve ter um "Pedido", nesse caso estou usando um ValueObject "InscriçãoComPedido", onde esse ValueObject, retorna dois atributos um com a inscrição e outro com o pedido.
Acho que o ValueObject não deve ser utilizado assim, porém vi um exemplo de código dessa maneira, e na época foi direto pra resolver meu problema.

2- Tenho uma entidade "Produto", e essa entidade produto tem um array de "Horários", e um array de "Informações Externas", nesse caso estou em dúvida entre um aggrgationRoot e em retornar essas informações direto no produto.
Porém são tabelas separadas no banco de dados, e fico preocupado em sempre buscar isso no banco mesmo quando não for necessário, e acabar gerando um custo muito alto.

Espero ter conseguido me expressar bem.
O que acham que pode ser o caminho para essas situações no DDD?

Obrigado =D

Carregando publicação patrocinada...
2

Uma dica que eu dou é a de não se procupar tando com as relações.

Sei que aparentemente vc está num contexto bem de OO, então vc precisa criar várias abstrações e contratos, etc; Eu diria pra vc se preocupar em como criar um domínio de forma fechada, ou seja, onde ele conheça só a sua implementação. E se esse domínio precisar usar uma funcionalidade de um outro domínio, vc faz injeção de dependência a fim de usar só a funcionalidade que vc precisa especificamente.

É um pouco abstrato só com palavras então eu diria pra considerar dar uma olhada no conceito de Ports and Adapters. Vai cair bem no seu contexto de OO e fica bem mais fácil de usar funcionalidades de outro domínio de forma segura e clara.

1

Cara dei uma olhada nesses conceitos, e realmente acredito que vou utilizar melhor na aplicação.
Inclusive acho que estava fazendo algo nessa linha, porém sem saber esses conceitos, então sem muita qualidade.

Porém no meu caso especifico é somente na entidade, acredito que não deva depender de nada externo, seria a camada mais "profunda" do DDD, dependendo dela mesmo.