在技術更新的進程中
仍然有一些人死抱著已經過了氣的東西不放
也有一些人雖然進入到新的世界
但仍擺脫不了陳舊的習慣
我沒有用
陋習
這個詞
因為我對這個詞也非常反感
新技術應該有新技術的做法
進入ASP
NET的世界
就應該把以往的習慣改正
全新的進入新的世界
把ASP的破爛扔掉
以下列舉的都是錯誤的做法
請不要誤以為是推薦的做法而進行推廣:
使用server side include給ASPX引入共同的頁面構圖
在ASP
NET的機制下
應使用ASCX(web user control)來實現
ASCX提供了更多可控制接口
並且更重要的是
ASCX是一個類
一個實實在在的類
可以全面控制它
不使用nfig
nfig提供了非常豐富的配置管理接口
是一個應用程序最核心的部分
但是很多人的nfig往往是空的
或者就從來沒有修改過
使用Response
Write向前端輸出消息
ASP
NET平台下的Response和ASP的Response有很大的不同
雖然表示同一含義
但用法上已經大不相同
Response
Write的內容只會輸出到頁的最前端
向前端輸出消息的正確方法是使用PlaceHolder
使用一系列session管理用戶連接狀態
這種方法在ASP裡被濫用
在ASP
NET環境下
正確的做法應該是設計一個類
結構化地保存數據
將對session或者cookie的訪問封裝起來
使用session驗證身份
這幾乎是通病
ASP
NET提供了一組用於用戶身份驗證的API
類型是forms驗證或者windows驗證
這一點quick start有一節講解得很清楚
可以絕大部分人還是依靠給session賦值來保持用戶身份驗證狀態
使用Response
Redirect重定向頁
這一點在必要的時候可以使用
但不可濫用
事實證明濫用重定向將導致邏輯上的嚴重混亂
這是在以頁為程序單元的時候的做法
使用front controller模式將使用戶的操作邏輯集中起來]
使用太多ASPX頁
ASP環境下的程序單元只有*
asp頁
ASP
NET可不是這樣
還有後端的類庫
ASCX等等
應將業務邏輯分別集中在不同的單元
而不應該一項操作使用一個ASPX
更多時候ASPX將做為ASCX或者custom control的容器而管理頁內邏輯
ASPX重用ASCX的同時
ASPX也做為統一的頁構圖重用
在多個邏輯單元之間復制代碼並修改相應邏輯
重用
重用
重用
處理此類問題的原則是不出現任何相同或相似的過程
如果你用上面的方法
一旦出現重大邏輯更改
帶來的結果將是災難性的
害怕使用DataSet
很多人被DataSet嚇壞了
認為
肯定
影響性能
但連最初的嘗試都不敢
他們總認為他們的產品一定重大
設計上應該
慎重
他們往往使用ArrayList或者設計低級的類來保存集合數據
進行艱難的數據倒入工作
對
性能
過多注意
對ASP
NET ViewState的機制特別不滿
或者總是挖空心思迫害人家
反倒把自己弄得很累
如果在對付ViewState的同時多注意少連幾次數據庫也許更文明些
應用程序根目錄很亂
ASP
NET是開發項目
不是網站
應該把不同的資源分類放置
例如把所有靜態資源(樣式表
腳本
圖像)組織到一起
甚至可以寫一組API來管理他們
ASPX應該放在一起
ASCX應該放在一起
*
cs呢? 應該把他們放到另外一個project裡
不厭其煩的寫訪問數據庫的過程
應該把這工作交給DataAccess Application Block
你自己還要開關connection
何苦呢
自己寫的東西最靠得住
事實往往正好相反
多注意使用人家寫好的產品
又不收你錢
何苦那麼愛面子呢
胡亂命名ASPX文件名
這是最讓人痛苦的了
ASPX文件名不僅需要容易識別
還應該遵循一定規則
因為behind每個ASPX都會有一個同名的類
想象一下
多難受
另外大部分人不知道管理自己的項目的name space
讓人好像看到一本帳一樣
從來不作繼承或派生
一些具有相同行為的類
應該從公共的基類派生出來
實際意義上
我們的ASPX應該有一個基類PageBase
因為總有一些公共的特性需要抽象出來
零property
他們的類(ASPX所對應)裡只有private method
不公開自己的任何秘密
可以這一定是JAVA的遺老干的事
零ASCX
不用說
他還沒學會ASP
NET
使用DreamWeaver
畫
ASPX
這批人是美工
甚至有一些人在非常陶醉地討論如何更好地
整合
DreamWeaver和Visual Studio
只熟悉System
Web
UI
WebControl和System
Data
SqlClient應該還有一些值得熟悉的類庫
零注釋
這些都是心裡很明白的快手
一任IDE生成的缺省注釋橫在那裡不管
零事件
對
事件驅動
一無所知
只知道在Page_Load()裡寫過程
或者雙擊一個按鈕寫Xxx_Clock()過程
在他們的程序裡看不到event和delegate
From:http://tw.wingwit.com/Article/program/net/201311/11437.html