Community Server專題一:概述Community Server
更新時(shí)間:2007年03月12日 00:00:00 作者:
Community Server專題一:概述Community Server
Community Server(CS)是一個(gè)非常優(yōu)秀的Asp.net開源軟件,目前官方發(fā)布的系統(tǒng)中包括三個(gè)部分:Asp.net Forums、DotText、Gallery。如果你是某個(gè)以CS構(gòu)架網(wǎng)站的會(huì)員,你可以很容易的就擁有一個(gè)Blog、一個(gè)相冊(cè)、還能在論壇上與他人一起進(jìn)行討論,這樣就形成一個(gè)以User為中心的社區(qū),這也就是起名為 Community Server的意義所在了。
CS的構(gòu)架很巧妙,三套原本不同的開源軟件在Telligent Systems的努力下結(jié)合在了一起,統(tǒng)一進(jìn)行用戶管理與權(quán)限設(shè)置(Menbership)、統(tǒng)一進(jìn)行異常處理、統(tǒng)一進(jìn)行本地化資源管理(多語(yǔ)言實(shí)現(xiàn))等等。雖然這不能完整地看成是Portal實(shí)現(xiàn),但是從代碼角度看已經(jīng)非常模塊化了,可以快速的進(jìn)行擴(kuò)展同時(shí)又能獲得很好的性能。實(shí)現(xiàn)這些主要依靠工程中的兩個(gè)項(xiàng)目: CommunityServerComponents與CommunityServerControls。
CommunityServerComponents 中包含一些全局業(yè)務(wù)邏輯類,如:Globals、Context等、一些接口和用來(lái)繼承的父類,如:Group、Section、Thread、Post 等、還有就是實(shí)現(xiàn)Membership的實(shí)體類。異常處理與Url Rewrite是通過(guò)繼承IHttpModule接口實(shí)現(xiàn)的,當(dāng)然要實(shí)現(xiàn) IHttpModule的繼承就一定要進(jìn)行配置,該項(xiàng)目中通過(guò)類CSConfiguration實(shí)現(xiàn)了一些全局的配置等。HttpHandler也得到了運(yùn)用,主要是處理一些不存在的Url,如讀取用戶頭像的時(shí)候就是使用的HttpHandler。緩存作為Web程序提高運(yùn)行效率最有效的方法之一在該項(xiàng)目中主要是在CSCache類中,該類沒(méi)有什么高深的代碼主要是對(duì)緩存方法進(jìn)行包裝,然后供全局統(tǒng)一管理。
CommunityServerControls 側(cè)重的是UI表現(xiàn)的業(yè)務(wù)邏輯,其中包含的很多公用的用戶自定義控件,典型的就是Editor、ResourceLabel,ResourceLabel幾個(gè)項(xiàng)目中的web頁(yè)面下基本都有他的身影。該項(xiàng)目還有一個(gè)重要的目的就是提供Skin功能,TemplatedWebControl為Forums、 Blog、Gallery幾個(gè)項(xiàng)目提供Skin的基類,當(dāng)然如果你擴(kuò)展CS添加自己的項(xiàng)目,也是需要繼承TemplatedWebControl,具體如何實(shí)現(xiàn)換膚后面會(huì)有專題進(jìn)行單獨(dú)的介紹,Asp.net Forums 原來(lái)?yè)Q膚使用的是皮膚的全名(如:Skin-PostView.ascx),但是在現(xiàn)在的項(xiàng)目中不需要提供全名只在基類中提供“Skin-{0}.ascx”,之后用GetType().Name得到{0},組合后就是全名了。也就是說(shuō)只要需要擴(kuò)展皮膚類的類名和皮膚的{0}名字相同,就可以自動(dòng)的找到他對(duì)應(yīng)的Skin,小小的改進(jìn)方便了許多。CS使用Membership統(tǒng)一用戶與權(quán)限管理,而用戶與權(quán)限管理作為所有擴(kuò)展項(xiàng)目的基礎(chǔ),因此CommunityServerControls中實(shí)現(xiàn)了Membership的UI業(yè)務(wù)邏輯。
CommunityServerForums、 CommunityServerGalleries、CommunityServerBlogs就是三個(gè)運(yùn)用項(xiàng)目的實(shí)現(xiàn)了,三層結(jié)構(gòu),通過(guò)大量的繼承,抽象等等完成的。CommunityServerGuestBook是一個(gè)簡(jiǎn)單的擴(kuò)展項(xiàng)目,分析代碼你會(huì)發(fā)現(xiàn)其實(shí)CS的擴(kuò)展式非常容易的,而且高效。
CS 在數(shù)據(jù)庫(kù)方面也有一些優(yōu)秀的設(shè)計(jì),如全部使用存儲(chǔ)過(guò)程,很多時(shí)候高手都會(huì)告訴你,在項(xiàng)目中全部使用存儲(chǔ)過(guò)程是不理智的,但是CS確這樣做。關(guān)鍵一點(diǎn)是他有一個(gè)SqlGenerator類和一些xx Query類,這些類可以根據(jù)要求產(chǎn)生SQL Text(主要是一些多變的Search和Post查詢),然后這些SQL Text作為存儲(chǔ)過(guò)程的參數(shù)被傳入,最后使用EXEC執(zhí)行它得到需要的結(jié)果。SQL Text比起存儲(chǔ)過(guò)程來(lái)的靈活,但容易出現(xiàn)漏洞最后被利用出現(xiàn)SQL注入攻擊,CS這樣的做法一舉兩得,當(dāng)然這需要更多的時(shí)間去編寫代碼。還有就是用存儲(chǔ)過(guò)程實(shí)現(xiàn)的數(shù)據(jù)分頁(yè)讀取等。
CommunityServerWeb項(xiàng)目是所有webpage html、資源文件、配置文件、js等的集合。該項(xiàng)目本身沒(méi)有邏輯代碼,分析主要是目錄的結(jié)構(gòu)與安排。
CS與Asp.net 2.0的關(guān)系密切,Membership、Localization、MasterPage、Url Rewrite這些在Asp.net 2.0中眼熟的詞匯在CS中你可以很容易看到它們的實(shí)現(xiàn),不只是運(yùn)用,你可以通過(guò)代碼看到它們是如何實(shí)現(xiàn)的。
說(shuō)了很多優(yōu)點(diǎn),最后說(shuō)一下缺點(diǎn):由于CS的前身是Asp.net Forums,在目前發(fā)布的版本中還可以很容易的看到Forums殘留的影子,如果不了解其發(fā)展的人分析起來(lái)一些變量會(huì)讓你摸不著頭腦,另外基礎(chǔ)構(gòu)架部分也有一部分代碼與Forums跌在了一起,不過(guò)我想隨著下一個(gè)版本,或者下下個(gè)版本的發(fā)布 CS會(huì)更有吸引力 ,我是非常希望CS下個(gè)版本發(fā)布的時(shí)候加入WebPart等更多的特性。
你可以通過(guò)以下地址下載到源代碼:http://communityserver.org/
官方站http://communityserver.cn/ 由寶玉發(fā)起的中文站
Community Server(CS)是一個(gè)非常優(yōu)秀的Asp.net開源軟件,目前官方發(fā)布的系統(tǒng)中包括三個(gè)部分:Asp.net Forums、DotText、Gallery。如果你是某個(gè)以CS構(gòu)架網(wǎng)站的會(huì)員,你可以很容易的就擁有一個(gè)Blog、一個(gè)相冊(cè)、還能在論壇上與他人一起進(jìn)行討論,這樣就形成一個(gè)以User為中心的社區(qū),這也就是起名為 Community Server的意義所在了。
CS的構(gòu)架很巧妙,三套原本不同的開源軟件在Telligent Systems的努力下結(jié)合在了一起,統(tǒng)一進(jìn)行用戶管理與權(quán)限設(shè)置(Menbership)、統(tǒng)一進(jìn)行異常處理、統(tǒng)一進(jìn)行本地化資源管理(多語(yǔ)言實(shí)現(xiàn))等等。雖然這不能完整地看成是Portal實(shí)現(xiàn),但是從代碼角度看已經(jīng)非常模塊化了,可以快速的進(jìn)行擴(kuò)展同時(shí)又能獲得很好的性能。實(shí)現(xiàn)這些主要依靠工程中的兩個(gè)項(xiàng)目: CommunityServerComponents與CommunityServerControls。
CommunityServerComponents 中包含一些全局業(yè)務(wù)邏輯類,如:Globals、Context等、一些接口和用來(lái)繼承的父類,如:Group、Section、Thread、Post 等、還有就是實(shí)現(xiàn)Membership的實(shí)體類。異常處理與Url Rewrite是通過(guò)繼承IHttpModule接口實(shí)現(xiàn)的,當(dāng)然要實(shí)現(xiàn) IHttpModule的繼承就一定要進(jìn)行配置,該項(xiàng)目中通過(guò)類CSConfiguration實(shí)現(xiàn)了一些全局的配置等。HttpHandler也得到了運(yùn)用,主要是處理一些不存在的Url,如讀取用戶頭像的時(shí)候就是使用的HttpHandler。緩存作為Web程序提高運(yùn)行效率最有效的方法之一在該項(xiàng)目中主要是在CSCache類中,該類沒(méi)有什么高深的代碼主要是對(duì)緩存方法進(jìn)行包裝,然后供全局統(tǒng)一管理。
CommunityServerControls 側(cè)重的是UI表現(xiàn)的業(yè)務(wù)邏輯,其中包含的很多公用的用戶自定義控件,典型的就是Editor、ResourceLabel,ResourceLabel幾個(gè)項(xiàng)目中的web頁(yè)面下基本都有他的身影。該項(xiàng)目還有一個(gè)重要的目的就是提供Skin功能,TemplatedWebControl為Forums、 Blog、Gallery幾個(gè)項(xiàng)目提供Skin的基類,當(dāng)然如果你擴(kuò)展CS添加自己的項(xiàng)目,也是需要繼承TemplatedWebControl,具體如何實(shí)現(xiàn)換膚后面會(huì)有專題進(jìn)行單獨(dú)的介紹,Asp.net Forums 原來(lái)?yè)Q膚使用的是皮膚的全名(如:Skin-PostView.ascx),但是在現(xiàn)在的項(xiàng)目中不需要提供全名只在基類中提供“Skin-{0}.ascx”,之后用GetType().Name得到{0},組合后就是全名了。也就是說(shuō)只要需要擴(kuò)展皮膚類的類名和皮膚的{0}名字相同,就可以自動(dòng)的找到他對(duì)應(yīng)的Skin,小小的改進(jìn)方便了許多。CS使用Membership統(tǒng)一用戶與權(quán)限管理,而用戶與權(quán)限管理作為所有擴(kuò)展項(xiàng)目的基礎(chǔ),因此CommunityServerControls中實(shí)現(xiàn)了Membership的UI業(yè)務(wù)邏輯。
CommunityServerForums、 CommunityServerGalleries、CommunityServerBlogs就是三個(gè)運(yùn)用項(xiàng)目的實(shí)現(xiàn)了,三層結(jié)構(gòu),通過(guò)大量的繼承,抽象等等完成的。CommunityServerGuestBook是一個(gè)簡(jiǎn)單的擴(kuò)展項(xiàng)目,分析代碼你會(huì)發(fā)現(xiàn)其實(shí)CS的擴(kuò)展式非常容易的,而且高效。
CS 在數(shù)據(jù)庫(kù)方面也有一些優(yōu)秀的設(shè)計(jì),如全部使用存儲(chǔ)過(guò)程,很多時(shí)候高手都會(huì)告訴你,在項(xiàng)目中全部使用存儲(chǔ)過(guò)程是不理智的,但是CS確這樣做。關(guān)鍵一點(diǎn)是他有一個(gè)SqlGenerator類和一些xx Query類,這些類可以根據(jù)要求產(chǎn)生SQL Text(主要是一些多變的Search和Post查詢),然后這些SQL Text作為存儲(chǔ)過(guò)程的參數(shù)被傳入,最后使用EXEC執(zhí)行它得到需要的結(jié)果。SQL Text比起存儲(chǔ)過(guò)程來(lái)的靈活,但容易出現(xiàn)漏洞最后被利用出現(xiàn)SQL注入攻擊,CS這樣的做法一舉兩得,當(dāng)然這需要更多的時(shí)間去編寫代碼。還有就是用存儲(chǔ)過(guò)程實(shí)現(xiàn)的數(shù)據(jù)分頁(yè)讀取等。
CommunityServerWeb項(xiàng)目是所有webpage html、資源文件、配置文件、js等的集合。該項(xiàng)目本身沒(méi)有邏輯代碼,分析主要是目錄的結(jié)構(gòu)與安排。
CS與Asp.net 2.0的關(guān)系密切,Membership、Localization、MasterPage、Url Rewrite這些在Asp.net 2.0中眼熟的詞匯在CS中你可以很容易看到它們的實(shí)現(xiàn),不只是運(yùn)用,你可以通過(guò)代碼看到它們是如何實(shí)現(xiàn)的。
說(shuō)了很多優(yōu)點(diǎn),最后說(shuō)一下缺點(diǎn):由于CS的前身是Asp.net Forums,在目前發(fā)布的版本中還可以很容易的看到Forums殘留的影子,如果不了解其發(fā)展的人分析起來(lái)一些變量會(huì)讓你摸不著頭腦,另外基礎(chǔ)構(gòu)架部分也有一部分代碼與Forums跌在了一起,不過(guò)我想隨著下一個(gè)版本,或者下下個(gè)版本的發(fā)布 CS會(huì)更有吸引力 ,我是非常希望CS下個(gè)版本發(fā)布的時(shí)候加入WebPart等更多的特性。
你可以通過(guò)以下地址下載到源代碼:http://communityserver.org/
官方站http://communityserver.cn/ 由寶玉發(fā)起的中文站
相關(guān)文章
ASP.Net分頁(yè)的分頁(yè)導(dǎo)航實(shí)例
本文介紹了ASP.Net分頁(yè)的分頁(yè)導(dǎo)航實(shí)例,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-10-10
ASP.NET Core實(shí)現(xiàn)文件上傳和下載
這篇文章主要為大家詳細(xì)介紹了ASP.NET Core實(shí)現(xiàn)文件上傳和下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
.Net中MoongoDB的簡(jiǎn)單調(diào)用圖文教程
這篇文章主要給大家介紹了關(guān)于.Net中MoongoDB的簡(jiǎn)單調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
asp.net AjaxControlToolKit--TabContainer控件的介紹
ModalPopup控件允許一個(gè)asp頁(yè)面的部分內(nèi)容以對(duì)話框的模式顯示給用戶,同時(shí)會(huì)限制用戶于頁(yè)面的其他部分交互。對(duì)話框顯示的內(nèi)容可以是一個(gè)層級(jí),這個(gè)層級(jí)的背景可以使用戶自定義的格式,簡(jiǎn)單的理解好比是一個(gè)對(duì)話框彈出來(lái)后,主頁(yè)面會(huì)顯示灰色,且不可操作。2009-06-06
集合類Array List HashTable實(shí)例操作練習(xí)
集合常用操作添加、遍歷、移除;本文將詳細(xì)介紹下ArrayList對(duì)值類型的操作/ArrayList對(duì)引用類型的操作及HashTable的使用,感興趣的你可不要錯(cuò)過(guò)了哈2013-02-02
在ASP.NET使用JavaScript顯示信息提示窗口實(shí)現(xiàn)原理及代碼
在ASP.NET使用JavaScript顯示信息窗口,感興趣的朋友可以了解一下,本文將介紹詳細(xì)的操作步驟,希望對(duì)你的JavaScript知識(shí)鞏固有所幫助2013-01-01
MVC+EasyUI+三層新聞網(wǎng)站建立 后臺(tái)登錄界面的搭建(二)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第二篇,教大家如何搭建后臺(tái)登錄界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

