2011-12-06 26 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'状态有关。它们与使用静态方法无关。 –

相关问题