一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

DotNetNuke 5 C#版本解讀之--架構(gòu)介紹

      整體上DNN5和其它比較大的企業(yè)級(jí)應(yīng)用系統(tǒng)一樣分為web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器。Web服務(wù)器包括表現(xiàn)層,商業(yè)邏輯層和數(shù)據(jù)訪問(wèn)層,而數(shù)據(jù)庫(kù)服務(wù)器主要是數(shù)據(jù)層。如下圖:

  

      首先給大家介紹下DNN的表現(xiàn)層,上圖中的Presentation部分:

      表現(xiàn)層主要包含如下幾個(gè)部分:

      1.web forms : 整個(gè)DNN主要的就是哪個(gè)default.ASPx頁(yè)面來(lái)展示內(nèi)容。它是整個(gè)系統(tǒng)的入口點(diǎn)。當(dāng)某個(gè)動(dòng)作發(fā)生時(shí),它會(huì)動(dòng)態(tài)的加載表現(xiàn)層需要顯示的內(nèi)容。
      2.皮膚: default.ASPx頁(yè)面會(huì)為不同的頁(yè)面加載它的皮膚。DNN皮膚更換非常靈活,這是它很大的一個(gè)優(yōu)點(diǎn)。皮膚的基類是在DotNETNuke.UI.Skins這個(gè)命名空間。最基本的類是Skin.cs這個(gè)類,如下圖:


  

 

      后面的文章里我將會(huì)和大家仔細(xì)來(lái)研究皮膚這部分的代碼如何來(lái)加載html皮膚文件的。

      1.Panes: Pane這個(gè)類是在DNN 5加進(jìn)來(lái)的。一個(gè)皮膚文件可以包含很多個(gè)pane。
      2.容器:每個(gè)Panel上面都會(huì)有來(lái)加載DNN模塊,頁(yè)面或者是portal的容器。容器的基類是在DotNETNuke.UI.Containers命名空間下,如下圖:
  

      1.模塊(Module):每個(gè)模塊至少有一個(gè)用戶控件(.ascx文件)。這個(gè)控件會(huì)被load在容器里面。DNN所有的模塊都在文件夾DesktopModules/…下面。


 

      1.客戶端js腳本:大部分的js腳本文件都放在js文件夾下,dnn允許一些模塊去包含和引用js文件。比如DNNMenu控件就用到dnnmenu.js。皮膚用的js文件就需要放在皮膚的安裝目錄下,自定義模塊用到的js文件放在自定義模塊的目錄下。

      下面我們來(lái)串一下DNN的表現(xiàn)層是如何工作的:

      當(dāng)客戶端訪問(wèn)DNN的portal時(shí),會(huì)看到default.ASPx頁(yè)面,default.ASPx頁(yè)面的后臺(tái)代碼default.ASPx.cs文件會(huì)加載當(dāng)前頁(yè)面的皮膚,皮膚必須是個(gè)繼承了DotNETNuke.UI.Skins.Skin這個(gè)基類的用戶自定義控件。

      首先皮膚這個(gè)對(duì)象會(huì)針對(duì)皮膚文件中每個(gè)文本區(qū)域創(chuàng)建一個(gè)Pane對(duì)象,并且把它們放在一個(gè)大的容器中。皮膚對(duì)象會(huì)迭代當(dāng)前portal的所有module。接下來(lái)皮膚對(duì)象會(huì)把這些module傳給適當(dāng)?shù)囊粋€(gè)Pane來(lái)展現(xiàn)出來(lái)。如果一個(gè)Pane有兩個(gè)或兩個(gè)以上的module,那么這個(gè)pane將會(huì)生成一個(gè)大的容器來(lái)存放這些module。

      接下來(lái)每個(gè)Pane將會(huì)決定該給它的module使用哪種類型的container。Pane對(duì)象為每個(gè)module初始化一個(gè)Container對(duì)象.

      上面動(dòng)作完成后,Container對(duì)象就開始查找是否自己的module繼承了DotNETNuke.Entities.Modules.iActionable這個(gè)接口,如果是,Container將會(huì)找到繼承的那些動(dòng)作,并順序的把它們放到contianer中。

      皮膚,容器和模塊都能有自己的css文件。在加載它們時(shí),它們都會(huì)在自己的目錄下查找是否有一個(gè)css文件,有的話就加載到客戶端。

      上面的過(guò)程如果你看著不是很清晰,你可以通過(guò)下面這個(gè)圖解來(lái)理解:

 

      DNN的邏輯表現(xiàn)層介紹

      如文章開始的圖示,邏輯表現(xiàn)層主要有如下幾部分:

1.Localization :也就是傳說(shuō)中的區(qū)域化。可以選擇不同的語(yǔ)言。
2.Caching: 通過(guò)使用緩存讓頁(yè)面在客戶端的響應(yīng)速度更快。
3.Exception management: 異常處理。一個(gè)好的系統(tǒng)異常處理也是必須。這樣可以讓用戶更加舒服。
4.Event logging: 日志的記錄。。。。
5.Personalization: 個(gè)性化的設(shè)定。
6.Search: 搜索
7.Installation and upgrades:很好的升級(jí)和安裝模式。
8.Membership,roles and profile: 角色管理等。
9.Security permissions: 安全許可。

      所有的這些邏輯表現(xiàn)層的實(shí)現(xiàn)都是使用DNN中非常出色一個(gè)模式:CBO and CBO controller。(可能你對(duì)這個(gè)比較迷惑,沒(méi)關(guān)系,我會(huì)在接下來(lái)的文章中著重介紹一下。這里你先理解大致的框架就行了)。

      CBO本質(zhì)上是對(duì)整個(gè)應(yīng)用程序中某個(gè)對(duì)象的一個(gè)展示。

      在DNN中,一個(gè)CBO是一個(gè)DotNETNuke.Service的實(shí)體。目前DNN5中所有的CBO如下:

 

 

      上面開始介紹邏輯表現(xiàn)層包含的那幾部分,我們?cè)贑BO里都可以找得到。

      CBO就好比在MVC里德Model部分,它一般都會(huì)是一個(gè)只有屬性的類,而對(duì)它執(zhí)行操作的那個(gè)CBO control就好比MVC中的controller類。

       如果這么理解的話CBO模式其實(shí)算是老模式了,但是這里比較奇特的是一個(gè)CBO Hydrator的類。它的位置:

 

      仔細(xì)去看它的代碼你會(huì)發(fā)現(xiàn)它的作用就是把用到的對(duì)象的屬性放到緩存中,當(dāng)某個(gè)對(duì)象被再次用到時(shí),所有的屬性值直接從緩存里得到,對(duì)服務(wù)器來(lái)說(shuō)壓力減少了。圖示:

 

 

      DNN的數(shù)據(jù)訪問(wèn)層介紹

      數(shù)據(jù)訪問(wèn)層就是為了能夠向商業(yè)邏輯層提供數(shù)據(jù)。DNN的數(shù)據(jù)訪問(wèn)層使用的是Provider Model模式。

      Data Provider是DNN中第一個(gè)成型的Provider Model模式的實(shí)例。當(dāng)初DNN只是支持SQL Server數(shù)據(jù)庫(kù),但是很多人都要求它能夠支持其它的數(shù)據(jù)存儲(chǔ),這樣就需要一個(gè)擴(kuò)展性非常好的數(shù)據(jù)訪問(wèn)層,也就引入了Provider Model模式。如下圖:

 

 

      因?yàn)镻rovider Model能夠讓一些特性更加獨(dú)體,不會(huì)依賴DNN的API,所以DNN大部分的CBO的數(shù)據(jù)提供都是Provider Model來(lái)進(jìn)行的。主要包括如下一些Provider:

 

 

 

      以上基本上介紹了DNN的整體架構(gòu),當(dāng)然由于我的表達(dá)能力和你本身可能剛接觸DNN的緣故,你會(huì)很迷惑,甚至覺得沒(méi)啥用,不過(guò)我希望我接下來(lái)拆開每一部分來(lái)介紹DNN能夠讓你更加的了解DNN。也希望你可以去codeplex上下載DNN的C#來(lái)體驗(yàn)下。接下來(lái)都會(huì)是結(jié)合代碼來(lái)進(jìn)行的,所以建議你去下載DNN 5.4.4 C#版本。

      這里再補(bǔ)充一下DNN的命名空間介紹:

DotNETNuke.Common: 整個(gè)應(yīng)用程序中任何地方都可能用到的類的集合。

DotNETNuke.Data: 所有需要于數(shù)據(jù)庫(kù)交互的地方都會(huì)用到的類的集合。

DotNETNuke.Entities: 所有顯示和管理Host,Portals,TabsUsers和Modules的部分都會(huì)用到的類的集合。

DotNETNuke.FrameWork: 一些最基本的類的集合。例如Usercontrol的基類,Page的基類等

DotNETNuke.Security: 用戶權(quán)限管理部分的類的集合。包括認(rèn)證,以及頁(yè)面的訪問(wèn)權(quán)限管理等。

DotNETNuke.UI:用戶接口的類的集合。例如:DotNETNuke.UI.Skins.skin,DotNETNuke.UI.Containers.Container等等。

NET技術(shù)DotNetNuke 5 C#版本解讀之--架構(gòu)介紹,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 91视频国内 | 婷婷欧美 | 色婷婷在线视频观看 | 91青青| 四虎网站入口 | 国产一区二区三区手机在线观看 | 欧美色惰 | 国产人成精品午夜在线观看 | 欧美99视频 | 亚洲美女福利视频 | 七七七久久久久人综合 | 97青草香蕉依人在线播放 | 日本免费久久久久久久网站 | 国内精品在线播放 | 91大神在线精品网址 | 国产成人综合在线观看网站 | www.色天使| 亚洲精品美女久久久久 | 婷婷狠狠干 | 男人靠女人视频无遮挡大全 | 亚洲乱亚洲乱妇41p国产成人 | 性感一级毛片 | 久久综合一 | 女子毛片 | 交资源网在线观看 | 午夜欧美成人久久久久久 | 福利在线视频观看 | 欧美ol丝袜高跟秘书在线观看 | 欧美精品福利视频 | 热久久国产欧美一区二区精品 | 美国一级做a爰片性色毛片 美国一区二区三区 | 欧美性一交激情视频在线 | www.好吊操| 天天色网站 | 最新国产精品精品视频 | 日本在线www| 国产精品原创巨作av | 91福利在线免费观看 | 簧片免费视频 | 日本欧美一区二区三区不卡视频 | 91精品国产色综合久久不 |