動(dòng)易SiteFactory新特性體驗(yàn)之旅——N層架構(gòu)設(shè)計(jì)
動(dòng)易CMS 2007的新特性中有這樣一個(gè)非常重要的特性:
以下是引用片段: N層架構(gòu)設(shè)計(jì) 動(dòng)易CMS 2007多方面研究和參考微軟在企業(yè)架構(gòu)的設(shè)計(jì)方案,采用以表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問(wèn)層為主的N層架構(gòu)設(shè)計(jì)。這樣的設(shè)計(jì)使得動(dòng)易CMS 2007結(jié)構(gòu)清晰、易于維護(hù),極大地提高了軟件的可擴(kuò)展性和重用性。 動(dòng)易CMS 2007以其基于.Net的N層架構(gòu)設(shè)計(jì),為系統(tǒng)的可伸縮性提供了堅(jiān)實(shí)的保障,可以適應(yīng)各種網(wǎng)站規(guī)模。網(wǎng)站在不斷發(fā)展變化,從一個(gè)個(gè)人網(wǎng)站發(fā)展成大型門戶網(wǎng)站,采用分層設(shè)計(jì)的系統(tǒng)自始至終都可以滿足網(wǎng)站不斷發(fā)展的功能需求和性能需求。在網(wǎng)站早期,使用分層設(shè)計(jì)的系統(tǒng)可能會(huì)顯得有些浪費(fèi),在性能上帶來(lái)一些損失,但隨著網(wǎng)站的不斷發(fā)展,分層設(shè)計(jì)的系統(tǒng)可以不做任何修改或者只需少量修改即可滿足大型網(wǎng)站的要求。而沒(méi)有分層設(shè)計(jì)的系統(tǒng),初期可能速度會(huì)較快,但網(wǎng)站一旦發(fā)展壯大,就不得不重新設(shè)計(jì)系統(tǒng)架構(gòu)或者更換程序。 無(wú)論你的網(wǎng)站是剛剛建立,還是已經(jīng)成長(zhǎng)為超級(jí)大站,動(dòng)易CMS2007以其強(qiáng)大的可伸縮性始終可以伴隨您的左右! |
這個(gè)特性是非常技術(shù)性的。可能很多人并不關(guān)心這個(gè)特性,但我認(rèn)為還是有必要讓大家多了解一下動(dòng)易CMS 2007的一些技術(shù)內(nèi)幕。呵呵,我的另一個(gè)目的當(dāng)然就是想給大家展現(xiàn)一下動(dòng)易的技術(shù)實(shí)力。
什么是N層架構(gòu)設(shè)計(jì)呢?N層架構(gòu)設(shè)計(jì)有哪些優(yōu)點(diǎn)和缺點(diǎn)?大家可以參看我的博客文章:
動(dòng)易CMS 2007快報(bào)--系統(tǒng)架構(gòu):/Blog/kuaibao/2764.html
動(dòng)易CMS 2007快報(bào)--系統(tǒng)架構(gòu)2:/Blog/kuaibao/2765.html
N層架構(gòu)設(shè)計(jì)有真假之分?,F(xiàn)在市面上許多軟件都宣稱自己是N層架構(gòu)設(shè)計(jì)的,但我們只要認(rèn)真研究一下對(duì)方的設(shè)計(jì),就會(huì)發(fā)現(xiàn)有些廠商是在夸大宣傳,是為了提升自己的產(chǎn)品形象而進(jìn)行虛假宣傳。
首先,有許多廠商根本沒(méi)有分清楚倒底什么是N層架構(gòu)設(shè)計(jì)。有些廠商甚至把B/S(瀏覽器/服務(wù)器)和C/S(客戶端/服務(wù)器)模式也當(dāng)成了N層架構(gòu)來(lái)宣傳。而實(shí)際上,N層架構(gòu)設(shè)計(jì)通常只是指服務(wù)器端的程序架構(gòu)。
其次,標(biāo)準(zhǔn)的N層架構(gòu)設(shè)計(jì)是指系統(tǒng)分成表現(xiàn)層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問(wèn)層等。各層都有明確的負(fù)責(zé)范圍,表現(xiàn)層并不處理業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn),業(yè)務(wù)邏輯層界面展現(xiàn)和數(shù)據(jù)訪問(wèn),數(shù)據(jù)訪問(wèn)層不負(fù)責(zé)界面展現(xiàn)和業(yè)務(wù)邏輯處理。但現(xiàn)在許多宣稱N層架構(gòu)設(shè)計(jì)的系統(tǒng),都是各層混雜在一起,比如直接在表現(xiàn)層的ASPX頁(yè)面中處理業(yè)務(wù)邏輯、執(zhí)行數(shù)據(jù)庫(kù)查詢等。而ASP、PHP等腳本語(yǔ)言編寫的系統(tǒng),因?yàn)槭芟抻谄浔旧淼奶攸c(diǎn),很難進(jìn)行分層設(shè)計(jì),基本上都是在ASP/PHP文件中直接處理所有業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)。用ASP/PHP開發(fā)的產(chǎn)品,如果宣傳自己的N層架構(gòu),90%可以說(shuō)是虛假宣傳。
下面我們就來(lái)看看動(dòng)易是如何分層設(shè)計(jì)的。
這是動(dòng)易CMS2007的N層架構(gòu)設(shè)計(jì)示意圖。這個(gè)圖我在前面的博客文章中已經(jīng)講述了。我們現(xiàn)分別來(lái)看看每一層有哪些文件。
先看表現(xiàn)層的ASPX文件:
隨便打開一個(gè)文件夾。因?yàn)楹笈_(tái)管理文件夾中的文件最多,我們就以這個(gè)為例吧??矗@里有許多ASPX文件。
我們可以打開其中的一個(gè)文件來(lái)看看代碼吧。這里就打開Admin\Contents\CommentManage.aspx吧。大致的代碼如下圖:
我們可以看到第一行是這樣的:
我們可以從“MasterPageFile="~/Admin/MasterPage.master"”可以看出動(dòng)易CMS2007采用了ASP.NET2.0的新特性——母版頁(yè)。關(guān)于母版頁(yè)的說(shuō)明,大家可以參看這篇文章:
在ASPX頁(yè)面中,我們只看到了HTML代碼和一些ASP.NET的控件,看不到任何程序代碼,這是因?yàn)閯?dòng)易CMS2007在表現(xiàn)層使用了ASP.NET的“代碼后置”特性,ASPX頁(yè)面中只放置了各種界面元素控件,相關(guān)的界面邏輯控制代碼放在另一個(gè)對(duì)應(yīng)的代碼文件中(與CommentManage.aspx對(duì)應(yīng)的就是CommentManage.aspx.cs)。發(fā)行時(shí),這些表現(xiàn)層的代碼文件會(huì)統(tǒng)一編譯成一個(gè)PowerEasy.WebSite.dll(位于bin目錄中)。另外,一些公用的控件,是做為獨(dú)立的項(xiàng)目的,編譯后就形成了PowerEasy.Controls.dll、PowerEasy.ModelControls.dll。
再來(lái)看看業(yè)務(wù)層和數(shù)據(jù)層的文件:
在分層架構(gòu)中,業(yè)務(wù)層和數(shù)據(jù)層的文件因?yàn)椴恍枰缑娲a,所以都會(huì)編譯成相應(yīng)的DLL文件(位于bin目錄中)。動(dòng)易CMS2007也是這樣。
在這張圖中,我們可以看到,動(dòng)易CMS2007這樣的大系統(tǒng),是將業(yè)務(wù)層的DLL按模塊進(jìn)行了劃分,每個(gè)較大的模塊為一個(gè)項(xiàng)目,編譯后就形成了獨(dú)立的DLL文件。如:PowerEasy.Contents.dll、PowerEasy.Shop.dll、PowerEasy.Crm.dll等。另外,還有一些共用的業(yè)務(wù)邏輯,也獨(dú)立成相應(yīng)的項(xiàng)目。如:PowerEasy.Common.dll、PowerEasy.CacheFactory.dll、PowerEasy.Enumerations.dll。
而PowerEasy.DalFactory.dll、PowerEasy.SqlServerDal.dll、PowerEasy.IDal.dll則是數(shù)據(jù)層文件。從這里我們可以看出,動(dòng)易CMS2007的數(shù)據(jù)訪問(wèn)層使用抽象工廠模式,將各個(gè)不同數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方式分離,從而理論上可以支持任意的數(shù)據(jù)庫(kù)。目前動(dòng)易CMS2007只提供了SQL Server的實(shí)現(xiàn),這就是PowerEasy.SqlServerDal.dll。等到系統(tǒng)功能穩(wěn)定后,會(huì)考慮增加ACCESS、Oracle、DB2、MySQL等數(shù)據(jù)庫(kù)實(shí)現(xiàn)。
另外有一個(gè)在各層之間傳遞數(shù)據(jù)的實(shí)體層,對(duì)應(yīng)的的文件是PowerEasy.Model.dll。這個(gè)保存的系統(tǒng)中所有要用到的實(shí)體對(duì)象,如:管理員、角色、會(huì)員、會(huì)員組等等。
其實(shí),數(shù)據(jù)層還有一個(gè)文件,大家看不到。那就是放在SQL數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程代碼。這個(gè)因?yàn)楹途唧w的數(shù)據(jù)庫(kù)密切相關(guān),數(shù)據(jù)庫(kù)不同,相應(yīng)的存儲(chǔ)過(guò)程的代碼會(huì)有所區(qū)別。動(dòng)易CMS2007的存儲(chǔ)過(guò)程針對(duì)SQL2000和SQL2005分別進(jìn)行了優(yōu)化,兩者不能通用,所以分別放在相應(yīng)的數(shù)據(jù)庫(kù)中了。
總的來(lái)說(shuō),動(dòng)易CMS2007的研發(fā)是一個(gè)非常龐大的工程,我們的開發(fā)團(tuán)隊(duì)花了一年多時(shí)間,終于讓這個(gè)龐大工程初見(jiàn)雛形。目前框架已經(jīng)搭好,日后就是往這框架上添磚加瓦了,速度將比以前的研發(fā)進(jìn)程快很多。
用戶登錄
還沒(méi)有賬號(hào)?
立即注冊(cè)