2012-12-03 11 views
6

In MVC qual è il metodo migliore per gestire eccezioni o errori nel business? Ho trovato diverse soluzioni ma non so quale scegliere.In MVC qual è il metodo migliore per gestire eccezioni o errori nel business?

Soluzione 1

public Person GetPersonById(string id) 
{ 
    MyProject.Model.Person person = null; 
    try 
    { 
     person = _personDataProvider.GetPersonById(id); 
    } 
    catch 
    { 
     // I use a try/catch to handle the exception and I return a null value 
     // I don't like this solution but the idea is to handle excpetion in 
     // business to always return valid object to my MVC. 
     person = null; 
    } 
    return person; 
} 

Soluzione 2

public Person GetPersonById(string id) 
{ 
    MyProject.Model.Person person = null; 
    person = _personDataProvider.GetPersonById(id); 
    // I do nothing. It to my MVC to handle exceptions 
    return person; 
} 

Soluzione 3

public Person GetPersonById(string id, ref MyProject.Technical.Errors errors) 
{ 
    MyProject.Model.Person person = null; 
    try 
    { 
     person = _personDataProvider.GetPersonById(id); 
    } 
    catch (Exception ex) 
    { 
     // I use a try/catch to handle the exception but I return a 
     // collection of errors (or status). this solution allow me to return 
     // several exception in case of form validation. 
     person = null; 
     errors.Add(ex); 
    } 
    return person; 
} 

Soluzione 4

// A better idea ? 

risposta

1

Vorrei anche suggerirvi di pensare a Null Object Pattern. Invece di restituire null, restituire un oggetto vuoto in modo che non sia necessario eseguire più controlli null. Dovresti creare una classe Persona astratta che abbia una proprietà statica come NullPerson che contiene valori predefiniti. Se il tuo DAL restituisce null, restituirai NullPerson. Puoi trovare ulteriori informazioni su Null Object Pattern.

0

errori di sistema devono essere presi al più presto possibile, mentre ogni e qualsiasi oggetto che consumano la classe dovrebbe implementato codice necessario per catturare eventuali errori. Facendo errori di sistema al livello più basso consente di decidere che cosa avete intenzione di fare: - Tornare nessun valore - Tira un errore personalizzato - rigenerare l'errore di sistema

Inserimento di un livello di astrazione tra errore di sistema e il vostro errore personalizzato è che puoi introdurre un nuovo errore che richiede attenzione diversa. IE: se l'errore è FileNotFoundException, potresti voler fare una differenza tra un errore normale (cioè il file è un rapporto giornaliero ma il file asket rappresenta un rapporto futuro) o no (il file dovrebbe esistere)

Vorrei preferisci la soluzione 3, anche se in una prima fase hai semplicemente rilanciato un'eccezione regolare quando necessario.

Serge

0

Ciò dipende dal requisito.

  1. Se si desidera solo sapere se il nostro processo è stato eseguito correttamente o meno, allora il Processo 2 è consigliabile.
  2. Se si è disposti a scrivere alcuni registri di errore, Process 3 è la scelta migliore.
  3. Se non si desidera utilizzare il metodo complesso e si desidera gestire eccezioni e scrivere i relativi registri, è consigliabile Procedere 1.

saluti, Pavan.G

1

Lasciate che le eccezioni essere gestite a livello di applicazione. Suggerirei di andare con Soluzione 2. È possibile utilizzare i blocchi try..catch quando si desidera modificare la logica quando si verificano alcune eccezioni, altrimenti lasciare semplicemente l'infrastruttura dell'applicazione.

Problemi correlati