Conflitti di progettazione e dati basati sul dominio

1

Mi rendo conto che probabilmente è eccessivo per ciò che è un'app client connessa occasionalmente, ma la costruzione delle radici degli aggregati è un bug quando ci si pensa dal punto di vista del cliente.

Allo scopo di fornire la visualizzazione del dominio, diciamo solo che l'intero sistema si occupa di organizzare e modificare le riunioni con i clienti.

Ora, il modello di dominio è impostato correttamente ed è in grado di definirsi correttamente FUORI dalla necessità di interfacciarsi con un altro sistema. Tuttavia, il caricamento di dati client su un sistema esterno può provocare conflitti di dati (aggiornamento, eliminazione, ecc.) Che a loro volta aumentano gli UserAlerts. Ciò richiederà l'intervento dell'utente del cliente per poterlo risolvere. (ad es. Visualizzazione dei due record prima di unirli e salvarli in uno solo).

Quindi, in primo luogo, mi sembra che lo scopo generale del modello di dominio principale sia ben diverso dalla necessità per un utente di risolvere un conflitto di dati. Quindi, in questo senso, mi aspetto che UserAlerts sia separato dall'aggregato della riunione.

Tuttavia, la risoluzione di un avviso dovrà sicuramente essere condotta all'interno di una transazione, poiché l'avviso stesso non dovrebbe esistere senza l'oggetto riunione. Quindi, in questo senso, sembra che abbia senso che l'avviso sia contenuto all'interno dell'aggregato.

Quindi, sono confuso riguardo a questo. Qualcuno là fuori ha modellato una situazione simile? (Ho già una soluzione temporanea, ma vorrei solo sapere cosa pensa la gente sia il modo corretto di fare le cose).

    
posta Milambardo 12.12.2014 - 18:09
fonte

1 risposta

2

Suppongo che se la risoluzione dei conflitti di dati è una parte delle considerazioni tecniche che non è possibile rimuovere, allora qualsiasi cosa necessaria per risolvere tali conflitti fa appartiene al dominio.

Potresti avere due livelli di interfaccia per quello, però.

Il livello più semplice, ignaro delle esigenze di risoluzione dei conflitti, può essere utilizzato ovunque non possano sorgere conflitti (ad es. query e visualizzazione) e pubblicato più ampiamente.

Il superset più complicato, quello che consente di vedere e risolvere i conflitti, può essere utilizzato solo dove possono verificarsi conflitti (ad esempio, aggiornamento o logica di replica) ed essere limitato a quell'area più ristretta. Se rielaborate la logica di gestione dei conflitti, i client che non funzionano con i conflitti non lo noteranno e non necessiteranno di un aggiornamento.

    
risposta data 15.12.2014 - 20:32
fonte

Leggi altre domande sui tag