Vedo servizi in DDD come risultato di Inversione di dipendenza .
Se dovessi utilizzare dipendenze "semplici", il tuo codice di dominio chiamerebbe il database per salvare o interrogare un'entità, o fabbrica, che crea un'entità, che è legata al database o al servizio esterno o qualche tipo di altro codice di infrastruttura .
Ma non è così che dovrebbe essere il codice del dominio. Il codice di dominio non dovrebbe dipendere dal codice di infrastruttura. Poiché questa dipendenza rende più difficile testare e, eventualmente, riutilizzare. È per questo che inverti questa dipendenza. Fai in modo che il codice dell'infrastruttura dipenda dal codice del dominio. E per farlo, devi introdurre un'astrazione. Un'astrazione che definisce quale comportamento il codice di dominio si aspetta venga implementato dall'infrastruttura.
E i servizi in DDD sono quell'astrazione. Nella maggior parte dei casi, per i codici di dominio, tali servizi dovrebbero essere interfacce semplici. E l'implementazione dovrebbe essere nel codice dell'infrastruttura, che ha dipendenza da quelle interfacce.