今天,項目出現了問題,從表現看像是串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的使用要求相似。