簡介
CommunityServer
CS的構架很巧妙,三套原本不同的開源軟體在TelligentSystems的努力下結合在了一起,統一進行用戶管理與許可權設定(Menbership)、統一進行異常處理、統一進行本地化資源管理(多語言實現)等等。雖然這不能完整地看成是Portal實現,但是從代碼角度看已經非常模組化了,可以快速的進行擴展同時又能獲得很好的性能。實現這些主要依靠工程中的兩個項目:CommunityServerComponents與CommunityServerControls。
業務邏輯
CommunityServerComponents中包含一些全局業務邏輯類,如:Globals、Context等、一些接口和用來繼承的父類,如:Group、Section、Thread、Post等、還有就是實現Membership的實體類。異常處理與UrlRewrite是通過繼承IHttpModule接口實現的,當然要實現IHttpModule的繼承就一定要進行配置,該項目中通過類CSConfiguration實現了一些全局的配置等。快取作為Web程式提高運行效率最有效的方法之一在該項目中主要是在CSCache類中,該類沒有什麼高深的代碼主要是對快取方法進行包裝,然後供全局統一管理。
CommunityServerControls側重的是UI表現的業務邏輯,其中包含的很多公用的用戶自定義控制項,典型的就是Editor、ResourceLabel,ResourceLabel幾個項目中的web頁面下基本都有他的身影。該項目還有一個重要的目的就是提供Skin功能,TemplatedWebControl為Forums、Blog、Gallery幾個項目提供Skin的基類,當然如果你擴展CS添加自己的項目,也是需要繼承TemplatedWebControl,具體如何實現換膚後面會有專題進行單獨的介紹,Asp.netForums原來換膚使用的是皮膚的全名(如:Skin-PostView.ascx),但是在的項目中不需要提供全名只在基類中提供“Skin-.ascx”,之後用GetType().Name得到,組合後就是全名了。也就是說只要需要擴展皮膚類的類名和皮膚的名字相同,就可以自動的找到他對應的Skin,小小的改進方便了許多。CS使用Membership統一用戶與許可權管理,而用戶與許可權管理作為所有擴展項目的基礎,因此CommunityServerControls中實現了Membership的UI業務邏輯。
CommunityServerForums、CommunityServerGalleries、CommunityServerBlogs就是三個運用項目的實現了,三層結構,通過大量的繼承,抽象等等完成的。CommunityServerGuestBook是一個簡單的擴展項目,分析代碼你會發現其實CS的擴展式非常容易的,而且高效。
CS在資料庫方面也有一些優秀的設計,如全部使用存儲過程,很多時候高手都會告訴你,在項目中全部使用存儲過程是不理智的,但是CS確這樣做。關鍵一點是他有一個SqlGenerator類和一些xxQuery類,這些類可以根據要求產生SQLText(主要是一些多變的Search和Post查詢),然後這些SQLText作為存儲過程的參數被傳入,最後使用EXEC執行它得到需要的結果。SQLText比起存儲過程來的靈活,但容易出現漏洞最後被利用出現SQL注入攻擊,CS這樣的做法一舉兩得,當然這需要更多的時間去編寫代碼。還有就是用存儲過程實現的數據分頁讀取等。
CommunityServerWeb項目是所有webpagehtml、資源檔案、配置檔案、js等的集合。該項目本身沒有邏輯代碼,分析主要是目錄的結構與安排。
CS與Asp.net2.0的關係密切,Membership、Localization、MasterPage、UrlRewrite這些在Asp.net2.0中眼熟的辭彙在CS中你可以很容易看到它們的實現,不只是運用,你可以通過代碼看到它們是如何實現的。
說了很多優點,最後說一下缺點:由於CS的前身是Asp.netForums,在發布的版本中還可以很容易的看到Forums殘留的影子,如果不了解其發展的人分析起來一些變數會讓你摸不著頭腦,另外基礎構架部分也有一部分代碼與Forums跌在了一起,不過我想隨著下一個版本,或者下下個版本的發布CS會更有吸引力,我是非常希望CS下個版本發布的時候加入WebPart等更多的特性。
你可以通過以下地址下載到原始碼:http://communityserver.org/
官方站 http://communityserver.cn/由寶玉發起的中文站