2016-03-21 14 views
0

ベストプラクティスとして、特定の方法で例外を処理するためにすべての実装を強制する方法について説明します。例えば、私はUIに次のインターフェイス特定の方法で動作するように抽象メソッドの実装を実施する方法

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"); 
    } 
} 

を持っているのは、言わせてそれがすべて「InvalidOperationsを」ハンドル、バックユーザーにメッセージを表示します。ただし、データとエラーメッセージをラップするカスタムオブジェクトを作成する方法もあります。

public OperationObject Get(string appName){ 
     var operationObject = new OperationObject(); 

     if (somecondition == somecondition) 
      operationObject.ErrorMessage = "message"; 
     else 
      operationObject.Data = MyDTO 
    } 

編集:基本的には、すべてのプロバイダが操作が失敗した理由を提供する方法が必要です。

答えて

1

私が過去にこれを処理した1つの方法は、簡単な操作結果クラスを利用することです。基本的には、操作のステータス、返されたデータ、発生したことを示すメッセージなど、オブジェクトの成功と失敗をラップします。ここで私はあなたがメソッド応答http://www.appvnext.com/blog/2015/12/10/outcome-basics-part-iのための同様の手法を説明したブログ記事を参照してくださいよサンプル

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; 
    } 
} 

です。

このような手法を使用すると、プロバイダーが例外や成功を伝えるための規約が提供されます。

+0

私はこのアプローチを実装しました。ブログの投稿に感謝します。 –

関連する問題