ASP.NET工廠模式中通用頁面和頁面繼承的實(shí)現(xiàn)
我們寫的ASP.NET頁面的是代碼后置的,所以我們繼承的時(shí)候就繼承我們的后置的代碼,也就是我們說的XXXX.aspx.cs文件。其實(shí)頁面的繼承和我們普通的類繼承一樣,只是ASP.NET頁面的界面是HTML和后置代碼共同組成的,所以也有一些不同,好了先進(jìn)開始我們的ASP.NET工廠模式和頁面繼承之旅:
我在這里總結(jié)了一幅在.NET環(huán)境下用Rational XDE生成的UML圖給大家一個(gè)直觀感性的認(rèn)識(shí),我先來講解一些這副圖中的類和它們的關(guān)系,BillFactory類是我定義的單據(jù)工廠它來識(shí)別產(chǎn)生那種單據(jù),VirturBillCOM是一個(gè)虛擬類(也可以是接口)它定義了一些方法讓繼承它的類來實(shí)現(xiàn),IssueBillMng_Frm和IssueBill_Frm是頁面的后置代碼類,負(fù)責(zé)頁面的一些操作比如,按鈕狀態(tài),調(diào)用業(yè)務(wù)邏輯等,BillInstorageMngList和IssueBillMng分別繼承VirturBillCom虛擬類來實(shí)現(xiàn)業(yè)務(wù)處理調(diào)用數(shù)據(jù)存儲(chǔ)層等,BillInstorageMngList負(fù)責(zé)入庫單的處理,IssueBillMng負(fù)責(zé)出庫單的處理。BillEntity和BillItemEntity是數(shù)據(jù)庫映射的實(shí)體類。BillInstorageMng繼承了頁面類IssueBillMng_Frm,BillInstorage繼承類頁面類IssueBill_Frm,大家可以看到,BillInstorageMng類和BillInstorage類由于繼承類頁面類,所以他們的類中只有一個(gè)空的構(gòu)造函數(shù),其他的都可以由它的父類處理,在這里大家可能要問,這樣就可以完成頁面的繼承了嗎?
這只是其中的一步,為了達(dá)到和父類的頁面顯示同樣的效果,必須把父類中的HTML拷貝到子類的HTML中,這樣界面的顯示一樣了(如果你要改動(dòng)一下界面可以在子類界面的HTML中改動(dòng)添加按鈕等),但是有個(gè)問題是,在.NET設(shè)計(jì)器中拷貝HTML到子類的頁面時(shí),進(jìn)入該子頁面的后置代碼的時(shí)候會(huì)自動(dòng)的添加頁面上的服務(wù)器控件在變量聲明的地方,我們可以想象,這些控件在父類已經(jīng)存在了而且默認(rèn)為保護(hù)類型為protected 所以子類也可以看到,所以控件就會(huì)重復(fù),就很出錯(cuò)的,必須在子類中把父類已經(jīng)用的控件變量刪除掉,如果子類自己想有其他的操作可以自己加入控件,但變量不能和父類重復(fù)。這樣很簡(jiǎn)單就完成了頁面的繼承,大家可以試試,它可以減少很多的重復(fù)的代碼。
還有就是我想說的就是BillInstorageMngList類和IssueBillMng類,他們都繼承VirturBillCom實(shí)現(xiàn)了VirturBillCom定義的函數(shù),他們是中間層,所以我們?cè)陧撁嬷姓{(diào)用的時(shí)候可以直接調(diào)用VirturBillCOM,具體真正的實(shí)現(xiàn)哪個(gè)實(shí)例由BillFactory來實(shí)現(xiàn),這樣可能還有不明白的,具體的說在IssueBillMng_Frm的構(gòu)造函數(shù)中(頁面的構(gòu)造函數(shù)默認(rèn)是沒有的,我們的自己加)聲明一個(gè)VirturBillCOM 的實(shí)例如:mgrObr = BillFactory(this);用ASP.NET工廠模式來判斷實(shí)例那個(gè)中間層變量來完成不同的工作。這就是簡(jiǎn)單ASP.NET工廠模式。
【編輯推薦】