2011-12-06 9 views
1

静的メソッドを使用するいくつかのコアクラスを持つプロジェクトを取得しました。HttpContextとデータベース接続を使用した静的メソッド

JavaScriptはいくつかのメソッドを反映したインターフェイスを持つC#プロジェクトです。このインタフェースで は、このようなのHttpContextを使用して、データベース(実際にはただ一つのアクセスデータベース)からデータを取得する静的メソッドへの呼び出しの多くは(いくつかのメソッドが内部のいくつかのロジックを持っている)があります。

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

ので、私の質問は:

これは悪いですか?これをすることの短所は何ですか?

データベース接続を使用する静的メソッドは、リクエストをキューに入れるため、高トラフィックのサイトでは問題があります。これは本当ですか?または、静的メソッドのデータベース接続について心配する必要はありませんか?

静的メソッド内のHttpContextはどうですか、それはなぜですか?

+0

ここで悪い点は、 'NullReferenceException'のキャッチです。それをしないでください。 –

+0

多くの静的メソッドを使用することの1つは、後で "[dependency injection](http://jamesshore.com/Blog/Dependency-Injection-Demystified.html)を使用することを決定する場合、障害になる可能性があるということです。 "あなたのコードの単体テストを構築しようとしている場合などです。データベース接続に関するあなたのコメントに関して、このような問題を引き起こす静的メソッドの本質には何もありません。静的メソッドの使用の有無にかかわらず、誰かが特定のデータベース接続コードをどのように実装したかによって異なります。 –

答えて

1

ここで悪いのはキャッチですNullReferenceExceptionです。それをしないでください。

代わりに、最初はnullをチェック:

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'状態の使用と関係していました。彼らは静的メソッドを使用することとは何の関係もありません。 –

関連する問題