禁止在页面中使用static变量
今天,项目出现了问题,从表现看像是串Session,我们的Session变量使用的并不多。而且这个现象能够必然的重现。因为是别的组的程序我也没怎么去查。后来他来问我,Session没有问题,是static变量出了问题。static变量!!!我一下就敏感起来。然后去看他的代码。My God!一堆的static变量。其实都应该用ViewState来保存的。
我以前给项目组的人解释 ViewState、Session、Application、static Member的时候说“不要在页面使用static变量,除非你自己确实清楚你在干什么。static变量和Application类似,而不是和Session一样。”。我现在的要求是“禁止在页面中使用static变量”。说得很绝对。
强调“禁止在页面中使用static变量”,出于以下原因。
一、 我怕还有人自以为很清楚,结果滥用static变量。而这种理解错误的后果很大。
二、 这是学习asp.net的人,很多人都会犯的错误(在csdn上老看到与此相关的问题)。
三、 C#语言的书,在讲授static Member的时候,都使用Console或则winform程序。给学习者在asp.net中的使用造成了误解。
四、 禁止使用static变量,合适的地方就会使用Application对象。而这个东东一般是在asp.net或者asp的书中提到,对他理解错误的人不多。
五、 asp.net的实际应用中static变量的作用极少,而对于极少几个可能会使用的地方,一般提供单件类更合适。
BTW:
我对ViewState的使用不怎么规定,但我自己一般会提供property来包装ViewState的使用。
使用Session我决定提供一个SessionHelper类来包装所有使用到的Session,禁止在页面中直接使用Session["dfdf"]这种方式。因为多人的工程会导致Session命名的冲突,这样要求一来容易查到冲突的命名,二来对冲突也容易修改。关键是Session也不是什么好东西,要有节制的使用。这样利于管理整个项目中使用的Session。贯彻这个要求也很容易,对项目中的文件搜一下'Session',就能很容易的找出违反规定的代码:D。
对于Application我也是提供包装,跟Session的使用要求相似。