“生死有序”
“裝裝孫子”
上篇文章《開篇》說了不少空洞的理論,這篇文章我還是先說說“大而化之”的東西:1、ASP.net控件(包括頁面本身)的生命期的細節;2、如何開始一個控件的編寫。
“生死有序”
ASP.net處理程序在接收到一個用戶的頁面請求後,它是如何變戲法把一個鮮活的頁面呈現給客戶端的呢?它都做了哪些事?按什麼順序做的?
要說明這個問題,我們首先要明白,一個頁面它本身也是一個Control。從設計模式的角度講,頁面模型是一個“合成模式(Composite)”,它本身是一棵由多層控件組成的結構樹,頂層是Page,以下有葉有樹枝,葉是不再包涵子控件的控件,枝是又包涵子控件的控件,每一層控件的生成都會調用一個生成子控件的方法,父控件調用子控件的生成方法,子又調用孫的,如此遞歸,保證頁面中所有有效的(一般情況下是Visible=true)控件都得到生成過程處理,(有關設計模式的東西大家可以查看呂震宇老師在博客園的設計模式系列文章,該系列文章是對閻博士《Java與模式》一書(88元,很厚)的提煉與加工,至少可用來做設計模式淺層面速成的教材),而每個控件在生命周期大體都包括以下幾個步驟:
1.實例化(Instantiate)
我們寫控件一般不要接觸此活動。
2.初始化(Initialize)
同上。
3.跟蹤視圖(Tracking View State)*
這個比較重要,涉及到視圖狀態,一般情況下不必重載此方法。
4.加載視圖狀態(Load view state)*
只會在回傳過程中調用此方法,用法同上。
5.加載回傳數據(Load postback data)*
如果你的控件生成之後要和客戶端交互,那麼這個方法就很重要,只會在回傳過程中調用此方法。