從ASP過渡到ASP.net遺留的二十個積習(xí)
在技術(shù)更新的進(jìn)程中, 仍然有一些人死抱著已經(jīng)過了氣的東西不放. 也有一些人雖然進(jìn)入到新的世界, 但仍擺脫不了陳舊的習(xí)慣. 我沒有用”陋習(xí)”這個詞, 因為我對這個詞也非常反感.
新技術(shù)應(yīng)該有新技術(shù)的做法, 進(jìn)入ASP.NET的世界, 就應(yīng)該把以往的習(xí)慣改正, 全新的進(jìn)入新的世界.
以下列舉的都是錯誤的做法, 請不要誤以為是推薦的做法而進(jìn)行推廣:
1. 使用server side include給ASPX引入共同的頁面構(gòu)圖.
在ASP.NET的機(jī)制下, 應(yīng)使用ASCX(web user control)來實現(xiàn). ASCX提供了更多可控制接口. 并且更重要的是, ASCX是一個類. 一個實實在在的類. 可以全面控制它.
2.不使用web.config
web.config提供了非常豐富的配置管理接口. 是一個應(yīng)用程序最核心的部分. 但是很多人的web.config往往是空的. 或者就從來沒有修改過.
3.使用Response.Write向前端輸出消息
ASP.NET平臺下的Response和ASP的Response有很大的不同. 雖然表示同一含義, 但用法上已經(jīng)大不相同. Response.Write的內(nèi)容只會輸出到頁的最前端. 向前端輸出消息的正確方法是使用PlaceHolder.
4.使用一系列session管理用戶連接狀態(tài)
這種方法在ASP里被濫用. 在ASP.NET環(huán)境下, 正確的做法應(yīng)該是設(shè)計一個類. 結(jié)構(gòu)化地保存數(shù)據(jù). 將對session或者cookie的訪問封裝起來.
5.使用session驗證身份
這幾乎是通病. ASP.NET提供了一組用于用戶身份驗證的API. 類型是forms驗證或者windows驗證. 這一點quick start有一節(jié)講解得很清楚. 可以絕大部分人還是依靠給session賦值來保持用戶身份驗證狀態(tài).
6.使用Response.Redirect重定向頁
這一點在必要的時候可以使用. 但不可濫用. 事實證明濫用重定向?qū)?dǎo)致邏輯上的嚴(yán)重混亂. 這是在以頁為程序單元的時候的做法. 使用front controller模式將使用戶的操作邏輯集中起來]
7.使用太多ASPX頁
ASP環(huán)境下的程序單元只有*.asp頁, ASP.NET可不是這樣, 還有后端的類庫, ASCX等等. 應(yīng)將業(yè)務(wù)邏輯分別集中在不同的單元, 而不應(yīng)該一項操作使用一個ASPX. 更多時候ASPX將做為ASCX或者custom control的容器而管理頁內(nèi)邏輯. ASPX重用ASCX的同時, ASPX也做為統(tǒng)一的頁構(gòu)圖重用.
8.在多個邏輯單元之間復(fù)制代碼并修改相應(yīng)邏輯
重用. 重用. 重用. 處理此類問題的原則是不出現(xiàn)任何相同或相似的過程. 如果你用上面的方法, 一旦出現(xiàn)重大邏輯更改, 帶來的結(jié)果將是災(zāi)難性的.
9.害怕使用DataSet.
很多人被DataSet嚇壞了. 認(rèn)為”肯定”影響性能. 但連最初的嘗試都不敢. 他們總認(rèn)為他們的產(chǎn)品一定重大, 設(shè)計上應(yīng)該”慎重”. 他們往往使用ArrayList或者設(shè)計低級的類來保存集合數(shù)據(jù). 進(jìn)行艱難的數(shù)據(jù)倒入工作.
10.對“性能”過多注意.
對ASP.NET ViewState的機(jī)制特別不滿. 或者總是挖空心思迫害人家. 反倒把自己弄得很累. 如果在對付ViewState的同時多注意少連幾次數(shù)據(jù)庫也許更文明些.
11.應(yīng)用程序根目錄很亂.
ASP.NET是開發(fā)項目. 不是網(wǎng)站. 應(yīng)該把不同的資源分類放置. 例如把所有靜態(tài)資源(樣式表, 腳本, 圖像)組織到一起. 甚至可以寫一組API來管理他們. ASPX應(yīng)該放在一起. ASCX應(yīng)該放在一起. .*.cs呢? 應(yīng)該把他們放到另外一個project里.
12.不厭其煩的寫訪問數(shù)據(jù)庫的過程
應(yīng)該把這工作交給DataAccess Application Block. 你自己還要開關(guān)connection, 何苦呢.
13.自己寫的東西最靠得住.
事實往往正好相反. 多注意使用人家寫好的產(chǎn)品. 又不收你錢, 何苦那么愛面子呢.
14. 胡亂命名ASPX文件名
這是最讓人痛苦的了. ASPX文件名不僅需要容易識別. 還應(yīng)該遵循一定規(guī)則. 因為behind每個ASPX都會有一個同名的類, 想象一下, 多難受. 另外大部分人不知道管理自己的項目的name space. 讓人好像看到一本帳一樣.
15.從來不作繼承或派生
一些具有相同行為的類, 應(yīng)該從公共的基類派生出來. 實際意義上, 我們的ASPX應(yīng)該有一個基類PageBase. 因為總有一些公共的特性需要抽象出來.
16.零property
他們的類(ASPX所對應(yīng))里只有private method. 不公開自己的任何秘密. 可以這一定是JA VA的遺老干的事.
17. 零ASCX
不用說, 他還沒學(xué)會ASP.NET
18.使用DreamWeaver“畫“ASPX
這批人是美工. 甚至有一些人在非常陶醉地討論如何更好地“整合“ DreamWeaver和Visual Studio.
19.只熟悉System.Web.UI.WebControl和System.Data.SqlClient應(yīng)該還有一些值得熟悉的類庫.
20.零注釋
這些都是心里很明白的快手. 一任IDE生成的缺省注釋橫在那里不管.
21.零事件
對“事件驅(qū)動“一無所知. 只知道在Page_Load()里寫過程. 或者雙擊一個按鈕寫Xxx_Clock()過程. 在他們的程序里看不到event和delegate.
相關(guān)文章
在ASP.NET 2.0中操作數(shù)據(jù)之五十六:使用ObjectDataSource緩存數(shù)據(jù)
本文主要講解ASP.NET 2.0中ObjectDataSource內(nèi)建的緩存功能,通過簡單的配置,我們可以將ObjectDataSource調(diào)用SelectMethod方法得到的數(shù)據(jù)進(jìn)行緩存。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之一:創(chuàng)建一個數(shù)據(jù)訪問層
本文主要介紹創(chuàng)建數(shù)據(jù)訪問層的具體步驟,從配置數(shù)據(jù)庫連接到插入,更新和刪除數(shù)據(jù)的具體實現(xiàn)方法,希望對大家有所幫助。2016-04-04
ASP.NET MVC的Localization本地化多語言支持
本文主要介紹在MVC中怎么使用ASP.NET中的資源文件做本地化的支持,希望對大家有所幫助。2016-04-04
在ASP.NET 2.0中操作數(shù)據(jù)之三十七:DataList批量更新
上篇文章我們實現(xiàn)了DataList單條記錄編輯的功能,數(shù)據(jù)量小的時候這種方法還好,如果數(shù)據(jù)量大我們更希望一次可以更新多條記錄,接下來就讓我們看看DataList如何實現(xiàn)批量更新吧。2016-05-05
在ASP.NET 2.0中操作數(shù)據(jù)之三十一:使用DataList來一行顯示多條記錄
ASP.NET 2.0中DataList默認(rèn)情況使用單列多行的table來顯示項,本文介紹通過設(shè)置RepeatColumns屬性為每行的列數(shù)就可以達(dá)到顯示多條記錄這個目的。2016-05-05
解讀ASP.NET 5 & MVC6系列教程(4):核心技術(shù)與環(huán)境配置
這篇文章主要介紹了ASP.NET 5 核心技術(shù)與環(huán)境配置,需要的朋友可以參考下2016-06-06
《解剖PetShop》之三:PetShop數(shù)據(jù)訪問層之消息處理
本文主要講解PetShop4.0的數(shù)據(jù)訪問層的消息處理部分,需要的朋友可以參考下。2016-05-05

