2016-03-21 14 views
0

En iyi uygulamalar olarak, özel durumları özel bir şekilde ele almak için tüm uygulamaları zorlamaya nasıl devam edilir. Örneğin, bu reklam UI herşeyi "InvalidOperations" işlemek ve kullanıcıya geri mesajı gösterecektir aşağıdaki arayüzÖzet Uygulamanın belirli bir şekilde davranması için nasıl uygulanmalı?

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

olduğunu varsayalım. Bununla birlikte, başka bir yaklaşım, verileri ve herhangi bir hata mesajını saracak özel bir nesne oluşturmak olacaktır.

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

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

Düzenleme: Temel olarak tüm sağlayıcılar operasyonu neden başarısız bir sebep temin etmek için bir yol istiyorum.

cevap

1

Geçmişte bunu ele almamın bir yolu, basit bir işlem sonuç sınıfı kullanmaktır. Esasen yaptığınız şey, başarı ve başarısızlıklarınızı, operasyonun durumunu, geri döndüğü verileri ve belki de neler olduğunu açıklayan bir mesajda tutan bir nesneye sarmaktır. İşte yöntem yanıtları http://www.appvnext.com/blog/2015/12/10/outcome-basics-part-i için benzer bir teknik anlatılır bir blog yazısı için sevk bir numuneyi

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

bu.

Böyle bir teknik kullanmak, sağlayıcılarınızın herhangi bir özel durumu ve başarıları iletmesi için bir sözleşme sağlayacaktır.

+0

Bu yaklaşımı uyguladım ve blog yayını için teşekkürler. –

İlgili konular