-
Notifications
You must be signed in to change notification settings - Fork 13
Description
Olá Devs!
Estou estudando sobre DDD e tentando aplicar seus conceitos utilizando nosso amado Laravel.
Entretanto, minha pergunta não é sobre framework especificamente mas sobre a correta abordagem no que diz respeito
a parte tática do DDD. Me desculpem se o assunto estiver muito fora do que o fórum discute, mas serei grato pela atenção.
Problemática
Vamos lá! Supondo que eu tenha um agregado Client e este possui uma lista de desejos. Cada item da lista corresponde a um Product.
Dito isso, se eu precisar remover um item da lista, recorro a entidade Client. Algo como:
$client->removeFromWishList(Product $product))
O método removeFromWishList(...) contém algumas regras que precisam estar em conformidade para remoção. Se tudo estiver ok, o produto será removido da lista de desejos contida no objeto Client.
Porém essa remoção é só em memória. Então utilizo uma Application Service, que tem acesso ao repositório que irá tratar da remoção. A pergunta é: O que o repositório que contém o método de remoção deverá receber como argumento?
Abordagem
-
Caso receba como argumento o objeto Client:
Como saberei qual produto terei de remover uma vez que tal produto não está mais na lista de desejos?
Ex.:$clientRepository->removeFromWishList(Client $client)
-
Caso receba como argumento o objeto Product ou o id do produto que será removido:
Dessa forma, eu entendo que estaria removendo qualquer produto sem passar pelo método removeFromWishList(...) ignorando as regras que garantem a remoção citada anteriormente.Ex.:
$clientRepository->removeFromWishList(Product $product)
Ou:
$clientRepository->removeFromWishList($productId)
Não ficou claro para mim qual das abordagens citadas (ou nenhuma delas...) seria a ideal.
Da mesma forma não entendo se terei de carregar todos os produtos da lista de desejos para o objeto Client sempre que eu quiser remover um produto da lista (passando pelas regras que garantem a remoção).
Desde já agradeço pela atenção.