Come si esegue la migrazione di parte di un processo aziendale a DDD?

3

Sono abbastanza nuovo per DDD, ma attualmente sto lavorando a un sistema che ha un elemento di gestione stipendi. Ho il requisito di inviare buste paga ad un sistema esterno quando vengono creati. Attualmente il processo di busta paga è tutto nel codice legacy esistente, ma stavo pensando che potrebbe essere una buona occasione per spostare del codice in un contesto limitato che è stato recentemente creato per la gestione delle retribuzioni per migrare lentamente il codice legacy in. Il sistema non è distribuito, quindi tutto viene eseguito in un unico processo.

Il mio pensiero era di creare un servizio applicativo che avrebbe orchestrato la chiamata a un servizio di infrastruttura per inviare i dati al sistema esterno e quindi aggiornare lo stato della busta paga. Questo verrebbe chiamato dal codice legacy. Un servizio di infrastruttura è la cosa giusta per questa integrazione, o è tutto un odore di design?

    
posta Steven Brookes 08.11.2018 - 20:04
fonte

1 risposta

0

Questa è più una questione di architettura che DDD. DDD può essere implementato con 2 livelli, 3 livelli, Pulito, Esagonale, ecc. Dai termini utilizzati nella domanda si sta utilizzando qualcosa di simile a Clean Architecture, quindi farò questa ipotesi.

Un servizio di infrastruttura è dove implementeresti il servizio per effettuare l'eventuale chiamata al broker di messaggi esterni, ma ottenere il messaggio da inviare dal modello di dominio e in quel servizio di infrastruttura sembra essere il punto in cui sei bloccato.

Nel modello di dominio, dichiara un'interfaccia per un servizio di messaggistica generico (ad esempio, non utilizza nulla dichiarato dal servizio di messaggistica che usi). Implementa il servizio che chiama il broker di messaggi esterni nel livello infrastruttura e fallo implementare l'interfaccia nel livello dominio. Ora puoi iniettare quel servizio nei tuoi oggetti di dominio, o passarlo dall'esterno se non viene usato spesso. Questo evita il bisogno del servizio applicativo che non farebbe altro che passare il messaggio.

BTW, anche se tutto il codice è in esecuzione nello stesso spazio degli indirizzi, dovresti usare un broker di messaggi. Questo crea una linea di demarcazione che consente di suddividere quel dominio in futuro in un microservizio a sé stante quando l'app diventa inaspettatamente riuscita.

    
risposta data 04.01.2019 - 11:55
fonte

Leggi altre domande sui tag