2011-12-06 27 views
1

我剛拿到一個項目,它有一些使用靜態方法的核心類。使用HttpContext和數據庫連接的靜態方法

它是一個C#項目,其接口反映了一些JavaScript方法。 在這個界面中,有使用了大量的調用靜態方法的HttpContext的,並從數據庫中的數據(實際上只是一個訪問數據庫),像這樣的(一些方法有內部的一些邏輯):

public static string UsrId { 
    get{ 
     try { 
      return HttpContext.Current.Session["usrid"].ToString(); 
     } catch(NullReferenceException) { 
      return ServiceVars.GuestId; 
     } 
    } 
} 

所以我的問題是:

這是不好的實踐嗎?做這件事的利弊(和優點)是什麼?

我在某處讀到使用數據庫連接的靜態方法對高流量站點不利,因爲它會排隊請求。這是真的?或者我應該不用擔心靜態方法中的數據庫連接?

那麼靜態方法中的HttpContext呢,它不好,爲什麼?

+0

這裏有什麼不好的是'NullReferenceException'的問題。永遠不要這樣做。 –

+0

使用大量靜態方法的一個問題是,如果您稍後決定要使用「[依賴注入](http://jamesshore.com/Blog/Dependency-Injection-Demystified.html)」,它們可能會成爲障礙。 「,例如,如果您正在嘗試爲您的代碼構建一組單元測試。關於你對數據庫連接的評論......靜態方法的本質並不會導致這樣的問題。這取決於某人是否已經實現了他們特定的數據庫連接代碼,無論是否使用靜態方法。 –

回答

1

這裏有什麼不好是NullReferenceException的問題。永遠不要這樣做。

相反,檢查空第一:

public static string UsrId { 
    get{ 
     var userId = HttpContext.Current.Session["usrid"]; 
     if (userId == null) { return ServiceVars.GuestId;} 
     return userId .ToString(); 
    } 
} 

而且,你可能是指該問題不在於靜態方法有問題,或者與HttpContext。這是使用Session狀態的問題。

+0

+1如果可以,請避免所有例外情況。如果有某種方式在不拋出異常的情況下走出該路線。 – JonH

+0

好的,謝謝你:)現在已經修好了。但關於靜態方法,沒有利用它與數據庫調用或HttpContext? –

+0

同樣,你所指的缺點與使用'Session'狀態有關。它們與使用靜態方法無關。 –

相關問題