Sto creando un sistema usando alcuni principi del DDD e sono bloccato da un problema.
Per dare un po 'più di contesto su ciò che sto cercando di fare, lasciatemi prima descrivere di cosa tratta il sistema:
L'idea è di consentire ad un utente di un tipo specifico di servizio di essere in grado di integrare e testare molti di questi servizi senza integrare il suo sistema con tutti loro.
Per fare ciò l'utente si integra con il mio sistema, che funge da gateway, integrandosi con tutti quei servizi.
Ora lasciami spiegare il problema:
Per ogni servizio integrato c'è un'implementazione API molto specifica (alcuni usano JSON, altri XML) e per questo motivo queste implementazioni sono usate come dipendenze separate (progetti).
Nel livello del dominio, esiste un'entità denominata ExternalService
, questa entità rappresenta un'integrazione del servizio supportata.
Diciamo che il tipo di servizio di cui stiamo parlando qui è un sistema SMS che invia messaggi a un numero di telefono.
Quindi abbiamo un'implementazione API che si integra con il servizio esterno:
class XYZSMSProviderApi {
public void sendMessage(String phone) {...}
}
E abbiamo l'entità ExternalService
con i dati del servizio XYZ
(questi dati sono mantenuti in un database):
class ExternalService {
public String name = "XYZ";
}
Il problema è: chi dovrebbe essere responsabile della chiamata al metodo sendMessage
della classe XYZSMSProviderApi
?
Devo iniettare l'oggetto API nell'entità e quindi avere un metodo per inviare il messaggio effettivo nell'entità?