Ecco il caso: secondo il linguaggio ubiquitario - il pagamento può essere inviato per l'elaborazione al gateway di pagamento (che si trova in un contesto limitato integrato tramite ACL (strato anti-corruzione) + OHS / PL)
In contesto locale, il pagamento è radice aggregata, quindi mi aspetterei un design del genere:
payment.send();
ma il problema qui è che il pagamento deve sapere come inviare il suo stato ad un altro contesto limitato tramite ACL a OHS. Quindi ho bisogno di iniettare questo PaymentGatewayService / Adapter come argomento:
payment.send(paymentGatewayService);
In questo caso paymentGatewayService restituisce alcuni oggetti valore che possono essere elaborati con il pagamento all'interno del metodo send()
. Ma
Ho sentito che questa non è una buona pratica per iniettare servizi per aggregare la radice tramite argomenti del metodo o DI, ma forse è OK? Il vantaggio qui è che non espongo la struttura aggregata all'esterno. O dovrei creare un servizio di dominio per coprirlo come:
Payment payment = ...
payment = paymentGatewayService.send(payment);
paymentRepository.store(payment);
In questo caso, non mi piace questa inversione, perché devo esporre direttamente la struttura aggregata in modo che il servizio gateway possa tradurre nel suo modello. Anche questo sta causando anemia in aggregato di pagamento.
Come posso gestire correttamente tali situazioni ??