2014-02-16 71 views
2

我正在爲asp.net mvc項目編寫一個類庫。類庫將返回實體並執行基本功能。在以前的項目中,我用這樣的邏輯:返回錯誤消息vs拋出異常

public class MyClassLibrary 
{ 
    public Response<ResponseMessage, MyEntity> GetMyEntity() 
    { 
     //Some code 
    } 
    public ResponseMessage SaveMyEntity(MyEntity e) 
    { 
     //Some code 
    } 
} 
public class BaseController:Controller 
{ 
    public ActionResult JsonDataSourceRequest<T>(Func<Response<ResponseMessage, List<T>>> operation, [DataSourceRequest] DataSourceRequest request) 
    { 
     try 
     { 
      Response<ResponseMessage, List<T>> ret = operation(); 
      if (ret.message.type == ReturnType.OK) 
      { 
       return Json(ret.result.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 
      } 
      else 
       return ConvertToJson(ret.message); 

     } 
     catch (Exception ex) 
     { 
      ResponseMessage m = new ResponseMessage(); 
      m.type = ReturnType.ERROR; 
      m.text = ex.text; 
      return ConvertToJson(m); 
     } 
    } 

    public ActionResult PartialView<T>(Func<Response<ResponseMessage, T>> operation) 
    { 
     //Some code 
    } 

    public ActionResult Action(Func<ResponseMessage> operation) 
    { 
     //some code 
    } 
} 
[CustomAuthorize] 
public class MyController : BaseController 
{ 
    public ActionResult MyEntityRead([DataSourceRequest] DataSourceRequest request) 
    { 
     return base.JsonDataSourceRequest(() => 
     { 
      return MyEntityService.GetAll(); 
     }, request); 
    } 
} 

在這裏,爲了使用BaseController的功能,我總是返回 響應 或 ResponseMessage

現在我認爲我可以有自定義的異常類而不是從所有可以拋出這些異常的方法中返回ResponseMessage。

我不知道這是否是一種好的做法。

在此先感謝。

+0

非常感謝nvoigt和@darin的快速反應。你認爲與項目規則有關的錯誤是否例外?例如, throw UserCannotBeYoungerThan18(「」); 不好? 我應該像「處理可以處理的每一個問題」這樣的座右銘嗎? – aldebaran

回答

4

我不知道這是不是好的做法。

不,拋出異常來處理非例外流是不好的設計。拋出異常需要付出代價,如果你能用正常流程處理你的情況,你應該避免它們。

5

如果有例外,你應該拋出異常。如果某件事情是預期的情況,你應該使用返回值。只有你可以知道你的情況適用。

+1

非常感謝您的快速響應。你認爲與項目規則有關的錯誤是否例外?例如, throw UserCannotBeYoungerThan18(「」); 不好? 我應該像「處理可以處理的每一個問題」這樣的座右銘嗎? (我重複上面的問題,因爲stackoverlow只有一個額外的用戶錯誤) – aldebaran

+1

如果您認爲所有的數據都是有效的,並且某個低於18的人是例外情況,因爲它應該已經在其他地方處理過了,然後拋出異常。如果你的支票是第一個檢查這個的實例,那麼我認爲這個民衆不是很好的例子。有人低於18歲是正常的,你應該找到一個正常的流量控制方式來處理這個問題。 – nvoigt

+0

我已經明白了,你的回答很清楚,很滿意,非常感謝:) – aldebaran