日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TheBeerHouse 网站项目学习笔记(5)---架构设计

發(fā)布時間:2025/4/14 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TheBeerHouse 网站项目学习笔记(5)---架构设计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前述討論:????TheBeerHouse 網(wǎng)站項目學習筆記(1)----換膚技術(shù)??
??????????????????TheBeerHouse 網(wǎng)站項目學習筆記(2)----個性化管理?
??????????????????TheBeerHouse 網(wǎng)站項目學習筆記(3)----安全管理(上)?
??????????????????TheBeerHouse 網(wǎng)站項目學習筆記(4)----安全管理(下)???


摘要:TheBeerHouse整個網(wǎng)站是屬于CMS(Content Management System)架構(gòu)的系統(tǒng),即基于內(nèi)容的網(wǎng)站設(shè)計,這是網(wǎng)站設(shè)計最普遍的一種架構(gòu).在此網(wǎng)站的設(shè)計中,為什么需要用到許多抽象基類,為什么需要各種看似讓人難以理解的屬性和成員變量,設(shè)計意圖是什么,這么設(shè)計有什么好處等等這類問題,都是值得我們思考和探討的問題.我們將從層次關(guān)系、類圖關(guān)系、設(shè)計意圖這幾個方面討論上述提出的問題.

一. 層次關(guān)系

?????

如上圖,紅色虛線框內(nèi)的將是我們討論的內(nèi)容,這里面幾乎全部是類,他們共同構(gòu)成了我們新聞文章管理模塊的功能架構(gòu).首先我們看到,這些類全部放到了App_Code目錄中,在這個目錄中包含了邏輯層和數(shù)據(jù)層的各種類,這些類各具功能,和我們以前學習的中規(guī)中矩的三層架是有很多區(qū)別的,以前的三層結(jié)構(gòu)中分為實體層(Models)、數(shù)據(jù)層(ModelService)、邏輯層(ModelManager),這些層中只有簡單的引用關(guān)系,基本不存在繼承或?qū)崿F(xiàn)接口的關(guān)系。那么當需求增加后,這些層次關(guān)系是可以實現(xiàn)擴充的,但總顯得有些單調(diào),因為有這么樣一句話是說的非常有道理的:在實際設(shè)計中,類的設(shè)計對于一些相似的功能類總該保持一個或多個基類,保持基類短小,讓它只包含子類所需的通用功能是個好的設(shè)計習慣, 即使最初在基類中不想放任何詳細的代碼,但以后如果需要一個通用屬性和方法, 那么在整個架構(gòu)中擁有一個基類也會很方便的.一般基類都設(shè)計成抽象類,所以我們在此結(jié)構(gòu)中看到的抽象類幾乎都是對下面具體子類通用功能的抽象。對于層次關(guān)系的討論我們就從基類開始.

?二. 邏輯層的結(jié)構(gòu)

?????以下是邏輯層的類關(guān)系圖:?????

?

其實CategoryDetails類是數(shù)據(jù)層的一個實體類,但它和邏輯層的類之間有些依賴關(guān)系, 所以在這里也畫進來了。這些類的關(guān)系有別與一般的三層結(jié)構(gòu)中的單純
的類關(guān)系,因為這里引入了抽象基類的概念.下面逐個介紹這些類的用途,以及為什么要使用如此的設(shè)計方法。

1. BizObject 這是邏輯層的最頂層的基類,從此類是斜體就看得出,它是一個抽象類.許多業(yè)務(wù)對象需要訪問很多共享信息,比如當前用戶名/IP地址以及當前環(huán)境中Cache對象的引用.這些信息可以放在一個BizObject基類中,讓其他所有域?qū)ο髲乃^承.該基類還可以包含一些輔助方法,如通過替換特殊字符(例如'<'及'>')來對HTML輸入進行編碼. 實際上,保持基類短小,讓它只包含子類所需的通用功能是個好的設(shè)計習慣, 即使最初在基類中不想放任何詳細的代碼,但以后如果需要一個通用屬性和方法,那么在整個架構(gòu)中擁有一個基類也會很方便的.
?????????

我們看到,此類的各種方法和屬性都是最基本的,都是新聞文章模塊中所有類都需要的一些公共屬性或字段以及方法,比如ConvertNullToEmptyString方法,其實這個方法代碼非常簡單,如果輸入的字符串為Null,那么就轉(zhuǎn)換為 " " 的字符串,這個小的方法是所有下面子類或?qū)O子類都可能需要的一種方法,那么我們就將這個方法抽象出來作為通用基類的一個方法提供給子(孫)類來用。當然,這只是一個小小的"伎倆",但體現(xiàn)了基類的作用,以及面向抽象的意義,面向抽象這個概念會在數(shù)據(jù)層的關(guān)系圖中得到詳細體現(xiàn),在下面再來介紹.其實這個類下面其它的方法和屬性跟剛才介紹的這個方法一樣,提供最一般的所有類的共享信息。當然這么做的作用就是想"代碼復用".

2. BaseArticle 是Article、Category和Comment的基類。它派生自BizObject類,并在此基礎(chǔ)上添加了一些文章特定的屬性。注意:這里是特定于文章的一些公共屬性,所以這個類的抽象性較BizObject類要弱一些,也就是更接近底層一些,更具體一些。

?
以上ID,AddDate,AddBy三個屬性對文章模塊中所有的業(yè)務(wù)類都是通用的,所以它可以被Comment,Article,Category這些類所繼承,這些就是基類存在的價值,也是我們在設(shè)計的時候需要周全考慮的因素,因為這樣必然帶來代碼重用的效果,避免在以上三個類中都去添加ID,AddDate,AddBy這樣的三個屬性.
我們重點說明Settings這個屬性:見如下代碼和注釋:

BaseArticle.Settings
?/**////?<summary>
????????
///?該屬性返回一個ArticlesElement配置類的實例
???????
///?</summary>

????????protected?static?ArticlesElement?Settings???//?[$1]?,再追將追到下面重要說明中的?[$2]和[$3]記號中
????????{
????????????
[重要說明]#region[重要說明]
????????????
//?如下語句中Globals.Settings?通過定義將返回TheBeerHouseSection類的實例,見[$2]
????????????
//?這個實例是對web.config中配置節(jié)<theBeerHouse>的API引用
????????????
//?那么在?Globals.Settings?下之所以有Articles這個屬性,可以參考
????????????
//??TheBeerHouseSection類中Articles屬性的定義?[$3]
????????????#endregion

????????????
get?{?return?Globals.Settings.Articles;?}???????
????????}

這個屬性將返回一個ArticlesElement配置類的實例,那么這個屬性到底有什么作用?我們知道,在整個網(wǎng)站的運行過程中都會有各種參數(shù)設(shè)置的,這些設(shè)置都可以通過前述TheBeerHouse 網(wǎng)站項目學習筆記(2)----個性化管理?中介紹的自定義配置節(jié)進行操作,那么我們就可以在網(wǎng)站運行期間動態(tài)的去讀這些配置信息,比如"是否啟用緩存","每頁顯示記錄數(shù)","RSS閱讀器的顯示數(shù)目"等這些設(shè)置都可以運行時訪問并修改,前句說的"運行時訪問"操作大多集中在BaseArticle的三個子類上(Article,Category,Comment),因此,BaseArticle.Settings大多作在其子類中作為判斷下一步行為的依據(jù)而存在.比如在Article類中有如下的判斷語句:
?if (BaseArticle.Settings.EnableCaching && BizObject.Cache[key] != null)
??????????? {
??????????????? articles = (List<Article>)BizObject.Cache[key];
??????????? }
??????????? else
...............

以上的BaseArticle.Settings.EnableCaching就是在子類進行文章獲取的時候先判讀是否網(wǎng)站的"啟用緩存" 開關(guān)開啟,如果開啟那么就到緩存中直接去取數(shù)據(jù).
以上就是Setting屬性存在的價值,那么還需要強調(diào)的就是此三個子類都需要這些開關(guān),所以我們就把Setting屬性做到了BaseArticle類中去,這么做當然是符合代碼復用原則的.

以上是邏輯層類設(shè)計的意圖和相互關(guān)系,其實我們在認真分析這些類的關(guān)系后,還應該多思考為什么作者要這么設(shè)計,這么設(shè)計對于系統(tǒng)彈性會帶來哪些好處,這么設(shè)計我自己能否掌握,在今后的設(shè)計中如何借鑒或模仿。

那么下篇將繼續(xù)介紹數(shù)據(jù)層設(shè)計的意圖和類關(guān)系,并介紹些設(shè)計技巧...........

?


?

?

轉(zhuǎn)載于:https://www.cnblogs.com/Rogerliu/archive/2009/03/07/1364823.html

總結(jié)

以上是生活随笔為你收集整理的TheBeerHouse 网站项目学习笔记(5)---架构设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。