Lungo contesto di domande, salta a tl; dr per la carne di esso.
Sto progettando un'integrazione tra due applicazioni web e siamo giunti alla conclusione che un modello di messaggio sarebbe una soluzione appropriata al problema. Il nocciolo dei requisiti è che i dati nel sistema A devono essere sincronizzati con il sistema B, attraverso un'interfaccia nel sistema A. Tutte le richieste sono richieste http. I dati nel sistema A sono un database di oggetti, i dati nel sistema B sono un database relazionale. Il sistema B accetta e restituisce JSON per ogni chiamata, mentre il sistema A utilizza formati specifici del dominio. Inoltre, tutta la logica aziendale deve essere nel sistema A. Il sistema B è una scatola nera e consente solo l'accesso al livello dati.
Ho sperimentato un Transfer Object Assembler Pattern , ma ha rilevato che non era giusto per l'integrazione. Ogni combinazione di oggetto e operazione sul sistema B deve essere ultimata con una richiesta separata. Se devo aggiornare un utente e un'organizzazione, questi devono essere in chiamate separate per separare le risorse. Usando il modello DTO qui richiederebbe un oggetto di trasferimento dati separato per ogni chiamata, che tipo di sconfigge lo scopo (per quanto ho capito).
Per farla breve, il modello del messaggio sembra essere la strada da percorrere. Punti bonus poiché è un breve salto all'utilizzo di un bus di messaggi effettivo per le integrazioni in futuro. Quindi ora l'idea è di creare un messaggio per ogni tipo di operazione. CreateMessage, UpdateMessage, ecc. Ogni messaggio dovrebbe avere un'istanza di una classe parametro che specifica il tipo di oggetto e il corpo JSON del messaggio. L'unico elemento mancante è la conversione dei dati del dominio di sistema A in JSON e JSON in dati di sistema A.
tl; dr
Voglio scriverlo correttamente in modo che il prossimo non debba mantenere un codice scritto / progettato veramente male.
Sto pensando di utilizzare il pattern Message Mapper per trasformare un oggetto dal sistema A in un messaggio Create / Update / Delete / Read con un centro JSON, in modo che possa essere eseguito nel sistema B. Il sistema A è OO, ma non supporta i generici. Sarebbe più pratico scrivere una collezione di classi che sono 1: 1 con il dominio come abbiamo bisogno di loro, o una classe monolitica che fa tutto il mapping? Non mi piace davvero l'idea di una classe molto ampia, ma poiché i generici non sono un'opzione, è difficile dire quale sia più appropriato.