2016-02-13 92 views
0

我正在ASP.NET MVC的Web項目。每個控制器調用服務來執行一些操作。讓我們的例子什麼是數據庫服務的良好做法C#

public interface IProjectService 
    { 
     bool ActivateProject(int projectId); 
     //others 
    } 

一看,實現類

public class ProjectService : IProjectService 
    { 
     private readonly IContextProvider _contextProvider; 

     public ProjectService(IContextProvider contextProvider) 
     { 
      _contextProvider = contextProvider; 
     } 

     public bool ActivateProject(int projectId) 
     { 
      using (var context = _contextProvider.GetContext()) 
      { 
       var project = context.Projects.Where(p => p.ProjectId == projectId).SingleOrDefault(); 
       project.Status = 1; 
       context.SaveChanges(); 
       return true; 
      } 
     } 
    //others 
    } 

在管理員希望激活項目的例子。我在jQuery中進行了驗證,因此admin不能通過projectId以外的其他任何東西。

那麼現在該返回什麼方法呢? 我應該把它作爲無效嗎? 可以說數據庫有錯誤,所以我應該拋出異常?這種操作有什麼做法?

+0

_「我有驗證jQuery」_ - 這不是你如何保護Web服務。 – CodeCaster

+0

你是什麼意思?我的意思是方法的參數總是OK – miechooy

+0

你永遠不能相信用戶的輸入。僅僅因爲你從jQuery傳遞值並不意味着有人繞過jquery並直接發送數據給你。驗證服務器端,100%的時間。 – Phill

回答

2

作爲一般規則,您不應該使用異常來處理標準執行流程。例外情況用於實際發生不應發生的情況。

就是說,有一個邊界線,異常和返回值很合適,這只是一個味道問題。

異常通常會提供更大的靈活性,因爲您可以拋出不同的異常類型並使用單個try/catch來處理它們。他們還提供更多的信息。布爾對於發生的事情沒有太多的說明。

如果你返回一個布爾值,你應該在方法內處理異常,至少在某處記錄錯誤細節。

我親自拋出異常,以防出現問題並讓調用者處理它。

+0

您可能錯過了問題的「Web服務」部分。沒有辦法從Web服務拋出異常(它會變成一個500響應,帶有描述異常的JSON負載),而客戶端實際上不能「處理」這些異常。 – CodeCaster

相關問題