2011-12-06 2 views
1

방금 ​​정적 메서드를 사용하는 몇 가지 핵심 클래스가있는 프로젝트가 있습니다.HttpContext 및 데이터베이스 연결을 사용하는 정적 메서드

자바 스크립트에 대한 몇 가지 방법을 반영하는 인터페이스가있는 C# 프로젝트입니다. 이 인터페이스에서 (몇 가지 방법은 내부의 로직이)가 사용하는 정적 메서드 호출을 많이 HttpContext를이 있고 이와 같은 데이터베이스에서 데이터 (실제로는 하나의 액세스 데이터베이스)를 얻을 :

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

그래서 내 질문입니다 :

이것은 나쁜 pratice입니까? 이것을하는 죄수 (그리고 전문가)는 무엇입니까?

데이터베이스 연결을 사용하는 정적 메서드는 요청을 대기열에 넣기 때문에 트래픽이 많은 사이트에 적합하지 않습니다. 사실입니까? 또는 정적 메서드에서 데이터베이스 연결에 대해 걱정하지 않아도됩니까?

정적 메서드 내부의 HttpContext는 어떻습니까? 그 이유는 무엇입니까?

+0

여기서 나쁜 점은'NullReferenceException'의 포착입니다. 그러지 마. –

+0

정적 메서드를 많이 사용하는 한 가지 이유는 나중에 "[종속성 주입] (http://jamesshore.com/Blog/Dependency-Injection-Demystified.html)을 사용하기로 결정할 때 장애가 될 수 있다는 것입니다. ", 예를 들어 코드에 대한 단위 테스트 세트를 작성하려는 경우. 데이터베이스 연결에 대한 귀하의 의견에 관해서는 정적 문제의 원인이 될 수있는 정적 메서드의 본질에 고유 한 것은 없습니다. 정적 메소드의 사용 여부와 관계없이 누군가가 특정 데이터베이스 연결 코드를 구현 한 방법에 따라 다릅니다. –

답변

1

여기서 나쁜 점은 catch가 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 가능한 경우 모든 예외를 피하십시오. 예외를 throw하지 않고 빠져 나갈 수있는 방법이 있다면 그 경로를 취하십시오. – JonH

+0

그래, 고마워. :) 이제 고쳐졌다. 하지만 정적 메서드에 대해서는 데이터베이스 호출이나 HttpContext와 함께 사용하는 것이 싫은가요? –

+0

다시 말하지만, 당신이 언급 한 단점은'Session' 상태를 사용하는 것과 관련이 있습니다. 정적 메서드를 사용하는 것과 아무런 관련이 없습니다. –

관련 문제