2016-03-21 2 views
0

Wie würden Sie als Best Practices alle Implementierungen implementieren, um Ausnahmen auf eine bestimmte Weise zu behandeln. zurück an den Benutzer zum Beispiel, sagen wir, ich die folgende Schnittstelle habenSo erzwingen Sie die Implementierung von abstract, um sich auf eine bestimmte Art zu verhalten

public interface IApplicationProvider<TData> : IDisposable{ 
    TData Get(string appName); 
} 

public abstract ApplicationProviderBase<MyDTO> { 
    public abstract MyDTO Get(string appName); 
} 

public class SomeApplicationProvider: ApplicationProviderBase { 
    public MyDTO Get(string appName){ 
     ... 
     if (somecondition == somecondition) 
      throw new InvalidOperation("Application could not be fetched due to a custom error"); 
    } 
} 

In der Benutzeroberfläche wird es alle „InvalidOperations“ handhaben und die Nachricht angezeigt werden soll. Ein anderer Ansatz wäre jedoch, ein benutzerdefiniertes Objekt zu erstellen, das die Daten und alle Fehlermeldungen umschließt.

Edit: Grundsätzlich möchte ich einen Weg für alle Anbieter einen Grund, warum die Operation fehlgeschlagen.

Antwort

1

Eine Möglichkeit, die ich in der Vergangenheit damit zu tun habe, ist die Nutzung einer einfachen Operationsergebnisklasse. Im Wesentlichen werden Ihre Erfolge und Fehler in ein Objekt eingepackt, das den Status der Operation enthält, alle Daten, die zurückgegeben werden, und möglicherweise eine Nachricht, die beschreibt, was passiert ist. Hier ist ein Beispiel

public enum OperationStatus { Success, Failure, Pending } 
public class OperationResult<T> 
{ 

    public T Data { get; private set; } 
    private OperationStatus opStatus; 

    public string Status 
    { 
     get 
     { 
      return this.opStatus.ToString(); 
     } 

     private set 
     { 
      var names = Enum.GetNames(typeof(OperationStatus)); 
      if (names.Contains(value)) 
      { 
       this.opStatus = (OperationStatus)Enum.Parse(typeof(OperationStatus), value); 
      } 
      else 
      { 
       throw new Exception("Illegal Status Type"); 
      } 
     } 
    } 

    public string Message { get; private set; } 

    public bool IsSuccess 
    { 
     get 
     { 
      return this.Status == OperationStatus.Success.ToString(); 
     } 
    } 

    public OperationResult(OperationStatus status, string message, T data) 
    { 
     this.Data = data; 
     this.Status = status.ToString(); 
     this.Message = message; 
    } 

    public static implicit operator bool(OperationResult<T> result) 
    { 
     return result.IsSuccess; 
    } 
} 

Ich werde dich zu einem Blog-Post beziehen, die für die Methode Antworten http://www.appvnext.com/blog/2015/12/10/outcome-basics-part-i eine ähnliche Technik diskutiert.

Die Verwendung einer solchen Technik bietet eine Konvention für Ihre Provider, um Ausnahmen und auch Erfolge zu kommunizieren.

+0

Ich habe diesen Ansatz implementiert und danke für den Blogbeitrag. –

Verwandte Themen