|
整體上DNN5和其它比較大的企業(yè)級應(yīng)用系統(tǒng)一樣分為web服務(wù)器和數(shù)據(jù)庫服務(wù)器。Web服務(wù)器包括表現(xiàn)層,商業(yè)邏輯層和數(shù)據(jù)訪問層,而數(shù)據(jù)庫服務(wù)器主要是數(shù)據(jù)層。如下圖:
首先給大家介紹下DNN的表現(xiàn)層,上圖中的Presentation部分:
表現(xiàn)層主要包含如下幾個部分:
1.web forms : 整個DNN主要的就是哪個default.ASPx頁面來展示內(nèi)容。它是整個系統(tǒng)的入口點。當(dāng)某個動作發(fā)生時,它會動態(tài)的加載表現(xiàn)層需要顯示的內(nèi)容。
2.皮膚: default.ASPx頁面會為不同的頁面加載它的皮膚。DNN皮膚更換非常靈活,這是它很大的一個優(yōu)點。皮膚的基類是在DotNETNuke.UI.Skins這個命名空間。最基本的類是Skin.cs這個類,如下圖:
后面的文章里我將會和大家仔細(xì)來研究皮膚這部分的代碼如何來加載html皮膚文件的。
1.Panes: Pane這個類是在DNN 5加進(jìn)來的。一個皮膚文件可以包含很多個pane。
2.容器:每個Panel上面都會有來加載DNN模塊,頁面或者是portal的容器。容器的基類是在DotNETNuke.UI.Containers命名空間下,如下圖:
1.模塊(Module):每個模塊至少有一個用戶控件(.ascx文件)。這個控件會被load在容器里面。DNN所有的模塊都在文件夾DesktopModules/…下面。
1.客戶端js腳本:大部分的js腳本文件都放在js文件夾下,dnn允許一些模塊去包含和引用js文件。比如DNNMenu控件就用到dnnmenu.js。皮膚用的js文件就需要放在皮膚的安裝目錄下,自定義模塊用到的js文件放在自定義模塊的目錄下。
下面我們來串一下DNN的表現(xiàn)層是如何工作的:
當(dāng)客戶端訪問DNN的portal時,會看到default.ASPx頁面,default.ASPx頁面的后臺代碼default.ASPx.cs文件會加載當(dāng)前頁面的皮膚,皮膚必須是個繼承了DotNETNuke.UI.Skins.Skin這個基類的用戶自定義控件。
首先皮膚這個對象會針對皮膚文件中每個文本區(qū)域創(chuàng)建一個Pane對象,并且把它們放在一個大的容器中。皮膚對象會迭代當(dāng)前portal的所有module。接下來皮膚對象會把這些module傳給適當(dāng)?shù)囊粋€Pane來展現(xiàn)出來。如果一個Pane有兩個或兩個以上的module,那么這個pane將會生成一個大的容器來存放這些module。
接下來每個Pane將會決定該給它的module使用哪種類型的container。Pane對象為每個module初始化一個Container對象.
上面動作完成后,Container對象就開始查找是否自己的module繼承了DotNETNuke.Entities.Modules.iActionable這個接口,如果是,Container將會找到繼承的那些動作,并順序的把它們放到contianer中。
皮膚,容器和模塊都能有自己的css文件。在加載它們時,它們都會在自己的目錄下查找是否有一個css文件,有的話就加載到客戶端。
上面的過程如果你看著不是很清晰,你可以通過下面這個圖解來理解:
DNN的邏輯表現(xiàn)層介紹
如文章開始的圖示,邏輯表現(xiàn)層主要有如下幾部分:
1.Localization :也就是傳說中的區(qū)域化。可以選擇不同的語言。
2.Caching: 通過使用緩存讓頁面在客戶端的響應(yīng)速度更快。
3.Exception management: 異常處理。一個好的系統(tǒng)異常處理也是必須。這樣可以讓用戶更加舒服。
4.Event logging: 日志的記錄。。。。
5.Personalization: 個性化的設(shè)定。
6.Search: 搜索
7.Installation and upgrades:很好的升級和安裝模式。
8.Membership,roles and profile: 角色管理等。
9.Security permissions: 安全許可。
所有的這些邏輯表現(xiàn)層的實現(xiàn)都是使用DNN中非常出色一個模式:CBO and CBO controller。(可能你對這個比較迷惑,沒關(guān)系,我會在接下來的文章中著重介紹一下。這里你先理解大致的框架就行了)。
CBO本質(zhì)上是對整個應(yīng)用程序中某個對象的一個展示。
在DNN中,一個CBO是一個DotNETNuke.Service的實體。目前DNN5中所有的CBO如下:
上面開始介紹邏輯表現(xiàn)層包含的那幾部分,我們在CBO里都可以找得到。
CBO就好比在MVC里德Model部分,它一般都會是一個只有屬性的類,而對它執(zhí)行操作的那個CBO control就好比MVC中的controller類。
如果這么理解的話CBO模式其實算是老模式了,但是這里比較奇特的是一個CBO Hydrator的類。它的位置:
仔細(xì)去看它的代碼你會發(fā)現(xiàn)它的作用就是把用到的對象的屬性放到緩存中,當(dāng)某個對象被再次用到時,所有的屬性值直接從緩存里得到,對服務(wù)器來說壓力減少了。圖示:
DNN的數(shù)據(jù)訪問層介紹
數(shù)據(jù)訪問層就是為了能夠向商業(yè)邏輯層提供數(shù)據(jù)。DNN的數(shù)據(jù)訪問層使用的是Provider Model模式。
Data Provider是DNN中第一個成型的Provider Model模式的實例。當(dāng)初DNN只是支持SQL Server數(shù)據(jù)庫,但是很多人都要求它能夠支持其它的數(shù)據(jù)存儲,這樣就需要一個擴展性非常好的數(shù)據(jù)訪問層,也就引入了Provider Model模式。如下圖:
因為Provider Model能夠讓一些特性更加獨體,不會依賴DNN的API,所以DNN大部分的CBO的數(shù)據(jù)提供都是Provider Model來進(jìn)行的。主要包括如下一些Provider:
以上基本上介紹了DNN的整體架構(gòu),當(dāng)然由于我的表達(dá)能力和你本身可能剛接觸DNN的緣故,你會很迷惑,甚至覺得沒啥用,不過我希望我接下來拆開每一部分來介紹DNN能夠讓你更加的了解DNN。也希望你可以去codeplex上下載DNN的C#來體驗下。接下來都會是結(jié)合代碼來進(jìn)行的,所以建議你去下載DNN 5.4.4 C#版本。
這里再補充一下DNN的命名空間介紹:
DotNETNuke.Common: 整個應(yīng)用程序中任何地方都可能用到的類的集合。
DotNETNuke.Data: 所有需要于數(shù)據(jù)庫交互的地方都會用到的類的集合。
DotNETNuke.Entities: 所有顯示和管理Host,Portals,TabsUsers和Modules的部分都會用到的類的集合。
DotNETNuke.FrameWork: 一些最基本的類的集合。例如Usercontrol的基類,Page的基類等
DotNETNuke.Security: 用戶權(quán)限管理部分的類的集合。包括認(rèn)證,以及頁面的訪問權(quán)限管理等。
DotNETNuke.UI:用戶接口的類的集合。例如:DotNETNuke.UI.Skins.skin,DotNETNuke.UI.Containers.Container等等。
NET技術(shù):DotNetNuke 5 C#版本解讀之--架構(gòu)介紹,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。