考慮到用戶的實(shí)際應(yīng)用需求和面向未來(lái)的軟件開(kāi)發(fā)理念,Discuz!NT在設(shè)計(jì)和開(kāi)發(fā)之初就構(gòu)建了優(yōu)良的架構(gòu),大大提高了軟件的伸縮性、可擴(kuò)展性和重用性,
親密接觸Discuz!NT之架構(gòu)篇
。本架構(gòu)除了使Discuz!NT自身結(jié)構(gòu)更為清晰和更易于維護(hù)以外,也為用戶進(jìn)行二次開(kāi)發(fā)和完善論壇個(gè)性化提供了極大的方便。Discuz!NT采用了如下的四層結(jié)構(gòu),讓我們簡(jiǎn)單介紹一下:
(一)顯示層
顯示層可由用戶自行進(jìn)行設(shè)計(jì)和修改,用以顯示最終的web頁(yè)面界面和論壇數(shù)據(jù)。特別值得一提的是,Discuz!NT在前臺(tái)沒(méi)有選擇絕大多數(shù)ASP.net程序所使用的控件模式,而是另外實(shí)現(xiàn)了一套方便好用的模板機(jī)制。本模板機(jī)制使站長(zhǎng)可以用html(或xhtml)來(lái)制作模板,然后由Discuz!NT的模板轉(zhuǎn)換功能轉(zhuǎn)換為Asp.net頁(yè)面程序(即aspx)文件,這樣做的好處有兩點(diǎn):
1)提高了易用性:ASP.net的ascx文件對(duì)于沒(méi)有學(xué)習(xí)過(guò)ASP.net或?qū)ζ溟_(kāi)發(fā)模式?jīng)]有了解的人來(lái)說(shuō),是存在難度的,而Discuz!NT的模板機(jī)制使得用戶只需要簡(jiǎn)單了解html就可以制作ASP.net的論壇界面,站長(zhǎng)可以輕松、自由地設(shè)計(jì)和修改界面了。
2)提高了性能:一般情況下,前臺(tái)程序不使用控件模式,而使用Discuz!NT的模板轉(zhuǎn)換功能,性能將會(huì)得到顯著提升。例如Discuz!NT的模板轉(zhuǎn)換功能不用數(shù)據(jù)綁定,不必判斷數(shù)據(jù)來(lái)源和轉(zhuǎn)換數(shù)據(jù)類型,不用頁(yè)面控件,避免了使用ViewState,從而大大提高了頁(yè)面性能。此外控件模式往往追求功能齊全,而當(dāng)你只需要其中一部分功能時(shí),大量無(wú)用的代碼則會(huì)拖累頁(yè)面性能。
更為突出的是,Discuz!NT顯示層的靈活性很高,支持在模板中定義導(dǎo)入的命名空間和插入c#代碼,從而使顯示層可以方便的插入其它程序集的數(shù)據(jù)。
(二) 頁(yè)面數(shù)據(jù)處理層
Discuz!NT的頁(yè)面數(shù)據(jù)處理層主要負(fù)責(zé)web頁(yè)面的數(shù)據(jù)輸入與輸出處理,包括檢測(cè)用戶數(shù)據(jù)提交的有效性校驗(yàn),以及為頁(yè)面程序所需要的數(shù)據(jù)源。本層實(shí)現(xiàn)了論壇的主要需求,完成了前臺(tái)各個(gè)頁(yè)面的功能流程,例如用戶發(fā)貼時(shí),頁(yè)面數(shù)據(jù)處理層首先判斷用戶權(quán)限,然后校驗(yàn)用戶提交的數(shù)據(jù)是否合法,最后調(diào)用對(duì)應(yīng)業(yè)務(wù)對(duì)象封裝類中的方法,將用戶的數(shù)據(jù)實(shí)際存儲(chǔ),
電腦資料
《親密接觸Discuz!NT之架構(gòu)篇》(http://www.msguai.com)。如果站長(zhǎng)希望用戶在前臺(tái)輸入、輸出時(shí),能同時(shí)與其它程序進(jìn)行交互,那么就可以在該層進(jìn)行處理,例如:一個(gè)釣魚(yú)愛(ài)好者網(wǎng)站想在Discuz!NT用戶個(gè)人資料中增加魚(yú)竿類別的選項(xiàng),并存儲(chǔ)到主網(wǎng)站用戶信息數(shù)據(jù)庫(kù),那么就可以在前面的顯示層增加魚(yú)竿類別,然后在頁(yè)面數(shù)據(jù)處理層中,調(diào)用將該數(shù)據(jù)存儲(chǔ)入主網(wǎng)站用戶信息數(shù)據(jù)庫(kù)的方法,完成存儲(chǔ)。
Discuz!NT的頁(yè)面數(shù)據(jù)處理層可以訪問(wèn)數(shù)據(jù)庫(kù),但并不推薦開(kāi)發(fā)者增加在該層與數(shù)據(jù)庫(kù)進(jìn)行交互,數(shù)據(jù)庫(kù)的訪問(wèn)在下面要介紹的業(yè)務(wù)對(duì)象封裝層中。
(三) 業(yè)務(wù)對(duì)象封裝層
以論壇來(lái)說(shuō),用戶、主題、帖子、版塊、用戶組等都屬于業(yè)務(wù)對(duì)象的范疇,Discuz!NT將業(yè)務(wù)對(duì)象描述為對(duì)象類,并提供了實(shí)現(xiàn)對(duì)這些對(duì)象進(jìn)行各種操作的豐富方法。以主題對(duì)象來(lái)說(shuō),對(duì)主題的封裝方法里就實(shí)現(xiàn)了創(chuàng)建、修改、刪除、更新等操作,Discuz!NT內(nèi)部是采用這些方法來(lái)處理主題的,同樣,開(kāi)發(fā)者也可以直接調(diào)用這些方法來(lái)實(shí)現(xiàn)對(duì)Discuz!NT的具體操作,而不必自己操作數(shù)據(jù)庫(kù)。
(四)數(shù)據(jù)庫(kù)訪問(wèn)層
數(shù)據(jù)庫(kù)訪問(wèn)層提供了對(duì)不同數(shù)據(jù)庫(kù)訪問(wèn)方法的封裝,目前Discuz!NT分別擁有對(duì)Access和SQLServer數(shù)據(jù)庫(kù)的訪問(wèn)封裝,對(duì)于SQLServer用戶來(lái)講,還可以通過(guò)修改Discuz!NT的數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程來(lái)高效地實(shí)現(xiàn)一些特定的需求。
上面簡(jiǎn)單介紹了Discuz!NT的四層結(jié)構(gòu),總體而言,論壇就像是一個(gè)飯店,論壇訪問(wèn)者是客人;顯示層則是飯店餐桌和大廳,使客人的就餐場(chǎng)所;頁(yè)面數(shù)據(jù)處理層為服務(wù)員,負(fù)責(zé)接收客人的點(diǎn)菜和向廚師下單;業(yè)務(wù)對(duì)象封裝層是廚師,負(fù)責(zé)制作菜肴并返回給服務(wù)員,數(shù)據(jù)庫(kù)訪問(wèn)層是采購(gòu)員,用來(lái)購(gòu)置廚師所需要的原材料;架構(gòu)就作為飯店流程或規(guī)章制度,通過(guò)完善布置各個(gè)成員的分工、協(xié)作,從而給客人一個(gè)良好的就餐環(huán)境和服務(wù)。
另外,無(wú)論開(kāi)發(fā)者使用的是c#、vb.net還是其它任何支持.net的語(yǔ)言,都可以直接調(diào)用上述四個(gè)層中的公開(kāi)方法,來(lái)實(shí)現(xiàn)對(duì)Discuz!NT的調(diào)用。隨著Discuz!NT完善后的開(kāi)源,必將有越來(lái)越多的開(kāi)發(fā)者參與開(kāi)發(fā),相信在我們共同的努力之下,Discuz!NT將會(huì)愈加完善。