Dove lavoro abbiamo i portafogli con le transazioni (ad esempio ogni transazione appartiene a un singolo portafoglio). Attualmente stiamo lavorando a un'aggiunta di trasferimenti tra portafogli. Come parte di questo, un nuovo concetto di Transfer
è stato aggiunto al dizionario di lingua onnipresente.
Un requisito funzionale è dare agli utenti la possibilità di cambiare una transazione in un trasferimento. Poiché una transazione regolare e un trasferimento hanno regole di convalida diverse (come chi può modificare l'aggregato, quali attributi sono modificabili, ...) e poiché i trasferimenti sono un concetto diverso da una transazione, ho creato un aggregato separato per rappresentare un trasferimento.
Ora sto affrontando un problema su come memorizzare i dati. Ho un gestore di comandi con una chiamata a Transaction.changeToTransfer
che restituisce un'istanza Transfer
. Sto bene con questo approccio, ma dove sono rimasto bloccato era la persistenza.
Dopo aver modificato una transazione in un trasferimento, la transazione regolare originale dovrebbe diventare un trasferimento e non sono sicuro di dove esattamente si suppone che avverrà questa trasformazione.
Una delle idee che mi è venuta in mente non era avere un concetto di trasferimento come un aggregato separato e rappresentare la relazione di trasferimento come valori interni di una transazione regolare, tuttavia non mi piace l'idea di un trasferimento avere accesso ai metodi di una transazione regolare che il trasferimento non dovrebbe avere affatto, quindi perché ho scelto il percorso di avere un aggregato separato.
Un esempio di differenza di comportamento è: un utente può modificare praticamente qualsiasi attributo su una normale transazione, sul trasferimento solo un campo memo può essere modificato e solo dal "proprietario" corrente del trasferimento. Sembra che introdurre controlli su tutti gli altri metodi di aggiornamento che coinvolgono if(isTransfer()) { ... throw ... }
sembri sbagliato.
Quale approccio di modellizzazione dovrei affrontare affrontando questo concetto e trasformando un aggregato in un altro?