Domanda

Quando si comunica conflitti di concorrenza per il vostro livello di applicazione, c'è un'alternativa all'utilizzo di eccezioni che rispetta anche il principio della comando Query Separazione , o sono eccezioni il meccanismo migliore che abbiamo (in lingue che le eccezioni di supporto)?

Nelle viscere della mia domanda, ho logica ottimistico blocco che esegue alcuni strati giù quando chiamo determinati metodi ad alto livello, ad esempio (Nel mio caso, sto usando uno strato di accesso ai dati personalizzati, anche se sono certamente aperto a sentire come implementazioni ORM farlo). chiamate di metodo di alto livello che interagisce con applicazione simile a questa:

// 'data' is just a placeholder for multiple parameters, including something
// that contains row version information
void Customer.UpdateInformation(object data);

ho bisogno di essere in grado di dire agli utenti di un'applicazione web quando qualcun altro ha aggiornato i dati su cui stanno lavorando.

preferirei non restituisce un valore da metodi che i dati delle modifiche. eccezioni in passato, ho buttato (simile alla scheda API di dati .NET, che getta un DBConcurrencyException quando rileva i conflitti), ma i conflitti di concorrenza non sono, in qualche modo, buon senso, eccezionale. Si tratta di un dato di fatto: un prevedibile, parte atteso del flusso di lavoro dell'applicazione. Non si qualificano come esogeni eccezioni , in tassonomia di Eric Lippert?

È stato utile?

Soluzione

A mio parere Eccezioni sono il modo migliore per comunicare questo tipo di errori. Credo che la soluzione è abbastanza giusto, perché si getta un tipo specifico di eccezione che si può prendere al livello di presentazione. Il livello di presentazione può utilizzare le informazioni in tale eccezione alla visualizzazione per l'utente.

Mentre Le eccezioni sono il modo migliore, creando una bella esperienza utente può essere molto difficile. La cosa più semplice sarebbe quella di dire all'utente che c'era un conflitto e decidere se gli sarebbe piaciuto perdere i suoi cambiamenti o come ignorare le nuove modifiche. Diventa difficile quando si desidera visualizzare i conflitti o permettere all'utente di scegliere quali valori per la precedenza e quali no. O almeno, è molto difficile fare questo in modo generico. È forse avrebbe bisogno di una specifica interfaccia per risolvere tali conflitti per ogni schermo nel vostro sistema in cui potrebbero verificarsi conflitti.

Nei sistemi ho lavorato, abbiamo quasi la maggior parte non ha prendere tali eccezioni per la visualizzazione per l'utente. Noi per lo più cercato di evitare che quei conflitti che si verificano, modificando i processi dietro di esso. E naturalmente del tutto dipende dal tipo di applicazione e il modo in cui funziona il business (o piace lavorare) quale soluzione è meglio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top