項目案例
應用(use)開發基礎框架 TeleFramework
1、背景及需求
  公司自主研發了(Got it)一(one)套使用(use)于(At)快速開發的(of)應用(use)開發基礎框架TeleFramework,該框架以(by)項目開發的(of)過程中(middle)的(of)經驗積累、技術沉澱爲(for)基礎,從項目中(middle)來(Come),到(arrive)項目中(middle)去,并爲(for)适應日新月異的(of)新技術不(No)斷升級完善。目前TeleFramework V2.1版,能夠很好的(of)支持.net Framework 2.0,并支持多種數據庫(SQL Server,Oracle,OLE DB)。應用(use)開發基礎框架TeleFramework以(by)微軟企業庫2006爲(for)基礎,使用(use)了(Got it)Microsoft.Practices.EnterpriseLibrary.Caching、Microsoft.Practices.EnterpriseLibrary.Common、Microsoft.Practices.ObjectBuilder程序集。應用(use)開發基礎框架TeleFramework對于(At)緩存的(of)管理管理,基于(At)微軟企業庫2006中(middle)的(of)Microsoft.Practices.EnterpriseLibrary.Caching程序集中(middle)提供CacheManager類方法。程序員使用(use)CacheFactory.GetCacheManager獲得缺省的(of)緩存管理器,也可以(by)将緩存管理器的(of)名稱作(do)爲(for)參數以(by)獲得指定名稱的(of)緩存管理器。緩存管理器提供增加條目、獲得條目以(by)及删除條目的(of)方法,在(exist)增加條目時(hour),可指定條目的(of)到(arrive)期方式以(by)及到(arrive)期時(hour)的(of)回調函數,程序員可以(by)通過設定到(arrive)期回調函數來(Come)接管緩存中(middle)内容的(of)刷新控制。緩存大(big)小、緩存輪詢周期以(by)及其他(he)參數可在(exist)配置文件中(middle)進行設定。注意,在(exist)分布式多層應用(use)中(middle),緩存可以(by)分别獨立地(land)用(use)在(exist)支持.Net Framwork 2.0的(of)任何場地(land)上(superior),隻需在(exist)使用(use)的(of)場地(land)上(superior)分别進行相應地(land)配置即可。
2、系統構成
業務邏輯基類(Telegnosis.Framework.Base):
  提供業務邏輯類(由代碼生(born)成工具生(born)成)的(of)處理基類,主要(want)包括 業務數據傳輸基類(BaseDto):實現頁面數據與對象之間的(of)數據傳輸 業務數據處理基類(BaseProc):對業務邏輯處理中(middle)的(of)異常時(hour)間進行了(Got it)定義 業務數據模型基類(BaseOrm):實現對象與關系數據單表之間的(of)映射 業務數據訪問基類(SqlBaseDao):實現了(Got it)與數據庫間數據交互的(of)相關方法,包括創建數據連接、單條數據插入、單條數據更新、單條數據删除等方法,支持事務處理。
數據訪問類(Telegnosis.Framework.DataAccess):
  提供業務邏輯向數據庫端所提交命令的(of)執行功能,使用(use)工廠模式,調用(use)幫助類SecurityHelper的(of)數據操作(do)方法,實現數據的(of)提交(支持事務模式)。
系統配置類(Telegnosis.Framework.Configuration):
  TeleFramework框架2.1框架的(of)所有(have)配置集中(middle)存放在(exist)應用(use)程序配置文件(App.Config或Web.Config)中(middle),由系統配置類完成框架配置文件解析的(of)功能,由幫助類ConfigHelper提供讀取各種配置的(of)方法,主要(want)包括 使用(use)GetDataSource獲得數據源配置 使用(use)GetExceptionSettings及GetException獲得異常配置 使用(use)GetMessageStringSettings及GetMessageString獲得消息字符串配置 使用(use)GetLogSettings及GetLogItem獲得日志配置 使用(use)GetSecuritySettings及GetSecurityItem獲得安全配置
系統常量類(Telegnosis.Framework.Constants):
  定義了(Got it)應用(use)程序配置文件中(middle)各個(indivual)配置節的(of)名稱常量(數據源配置節、異常信息配置、消息字符串配置、日志配置節、安全配置節、應用(use)配置節),以(by)及框架中(middle)枚舉類型(異常類别、日志枚舉類、記錄編輯狀态枚舉)
異常處理類(Telegnosis.Framework.Exception):
  對框架中(middle)的(of)異常進行封裝,其中(middle)幫助類ExceptionHelper封裝了(Got it)異常處理的(of)方法入口。
日 志 類(Telegnosis.Framework.Logging):
  在(exist)TeleFramework框架中(middle),在(exist)數據庫表Tele_FrameLogs中(middle)記錄系統日志。日志類的(of)業務邏輯處理類,由代碼生(born)成工具生(born)成,實現對數據庫表的(of)訪問。其中(middle)幫助類LogHelper封裝了(Got it)新增日志的(of)方法入口,應用(use)程序可以(by)通過調用(use)這(this)些方法實現 。
權限認證類(Telegnosis.Framework.Security):
  完成框架認證授權的(of)大(big)部分功能,其中(middle)幫助類SecurityHelper封裝了(Got it)認證授權的(of)方法入口,應用(use)程序可以(by)通過調用(use)這(this)些方法實現應用(use)系統的(of)認證授權功能。
認證:
  SecurityHelper.Authenticate方法完成基本的(of)用(use)戶的(of)認證功能,應用(use)程序把用(use)戶名和(and)口令作(do)爲(for)參數傳入,框架将之與數據庫中(middle)的(of)用(use)戶名和(and)口令進行比對,比對一(one)緻後生(born)成UserToken對象并緩存到(arrive)框架中(middle),然後将字符串類型的(of)令牌返回給應用(use)程序;應用(use)程序在(exist)獲得令牌後進行用(use)戶環境建立,這(this)樣就完成了(Got it)基本的(of)認證工作(do),應用(use)程序可以(by)在(exist)随後的(of)授權控制中(middle)通過令牌來(Come)獲得訪問許可。 業務層的(of)業務邏輯處理(即Proc)都是(yes)至少需要(want)經過認證的(of),是(yes)否需要(want)授權訪問則可以(by)由應用(use)設計者來(Come)決定。實現的(of)方法是(yes),Proc的(of)基類由原先的(of)BaseProc改爲(for)SecurityBaseProc,在(exist)基類SecurityBaseProc的(of)構造函數中(middle)加入了(Got it)認證校驗過程,當有(have)訪問請求傳來(Come)時(hour),框架首先從上(superior)下文調用(use)環境(CallContext)中(middle)獲得UI層傳遞來(Come)的(of)FlowBox,并從FlowBox中(middle)獲得用(use)戶在(exist)認證時(hour)獲得的(of)字符串令牌,然後校驗該令牌是(yes)否存在(exist)于(At)框架的(of)令牌池(TokenPool)中(middle),如果存在(exist)則認爲(for)該訪問的(of)用(use)戶是(yes)被認證過的(of),接着根據應用(use)設計者的(of)設定來(Come)判斷是(yes)否需要(want)進行進一(one)步的(of)授權校驗。 在(exist)用(use)戶登出(out)系統時(hour),應用(use)需要(want)調用(use)Logoff方法來(Come)告訴框架将令牌池中(middle)相應的(of)用(use)戶令牌進行銷毀,在(exist)物理上(superior)分離的(of)多層應用(use)中(middle),框架會對長時(hour)間未使用(use)的(of)用(use)戶令牌進行超時(hour)銷毀,類似于(At)Web應用(use)服務器的(of)會話超時(hour)。超時(hour)可在(exist)配置文件中(middle)進行設置。 在(exist)編程時(hour)需要(want)明确的(of)是(yes),通過SecurityHelper.Authenticate獲得字符串令牌與框架在(exist)令牌池中(middle)建立的(of)用(use)戶令牌(UserToken)是(yes)兩個(indivual)不(No)同的(of)對象,字符串令牌隻是(yes)用(use)戶令牌的(of)鍵索引,用(use)戶令牌中(middle)則維持了(Got it)用(use)戶的(of)角色、組織機構以(by)及曾授權訪問過的(of)資源代碼等複雜數據,一(one)般情況下用(use)戶令牌隻在(exist)框架中(middle)使用(use)。 授權 授權包含兩方面的(of)功能,其一(one)是(yes)權限的(of)分配,即将特定資源的(of)訪問權限授予特定的(of)對象(比如角色、組織以(by)及用(use)戶等),并分配用(use)戶的(of)角色及所屬組織等,這(this)部分工作(do)可以(by)使用(use)已有(have)的(of)TelePass來(Come)完成,也可以(by)根據應用(use)需要(want)進行自定義。 授權的(of)另一(one)方面功能就是(yes)權限驗證即訪問控制,主要(want)使用(use)SecurityHelper.Authorize方法來(Come)完成,參數有(have)兩個(indivual):前面認證過程中(middle)獲得的(of)字符串令牌及需要(want)驗證的(of)資源代碼。框架根據傳遞進來(Come)的(of)字符串令牌獲得令牌池中(middle)的(of)用(use)戶令牌(UserToken),從用(use)戶令牌中(middle)得到(arrive)該用(use)戶的(of)角色、組織及曾經被授權訪問過的(of)資源代碼,如果需要(want)驗證的(of)資源代碼曾經被授權訪問過則框架不(No)會再次進行進一(one)步驗證,否則框架根據用(use)戶的(of)角色、組織及用(use)戶本身到(arrive)系統緩存的(of)資源訪問控制列表中(middle)查找是(yes)否被許可訪問指定的(of)資源。 在(exist)我(I)們(them)的(of)框架體系中(middle),資源主要(want)被定義爲(for)三大(big)類:菜單、頁面、頁内資源(比如按鈕),其中(middle)菜單資源、頁面資源的(of)授權訪問可以(by)在(exist)應用(use)的(of)基類中(middle)完成,業内資源及特殊的(of)功能性資源則需要(want)程序員來(Come)編碼調用(use)SecurityHelper.Authorize完成。對于(At)Proc中(middle)的(of)授權訪問校驗與頁面比較類似,對于(At)整個(indivual)Proc的(of)訪問控制可以(by)同樣在(exist)基類(SecurityBaseProc)中(middle)完成,但Proc中(middle)某個(indivual)方法的(of)訪問控制則需要(want)程序員編碼調用(use)SecurityHelper.Authorize實現。 對于(At)菜單資源,框架提供MenuHelper.GetAuthorizedMenu方法來(Come)爲(for)應用(use)程序提供當前用(use)戶被許可訪問的(of)菜單結構,參數爲(for)字符串令牌。
框架工具類(Telegnosis.Framework.Util):
  完成對調用(use)上(superior)下文(CallContext)對象漂流箱FlowBox的(of)封裝,提供對分布式程序域的(of)支持。 在(exist)TeleFramework框架中(middle),前端(比如UI客戶端)環境參數可以(by)通過框架傳遞到(arrive)後端的(of)多個(indivual)服務器上(superior)的(of)應用(use)服務中(middle),而這(this)種傳遞的(of)過程對框架中(middle)的(of)應用(use)來(Come)說是(yes)完全透明的(of)。漂流箱FlowBox就是(yes)這(this)些環境參數的(of)載體,前端應用(use)在(exist)啓動時(hour),框架将它放置在(exist).Net提供的(of)該應用(use)的(of)調用(use)上(superior)下文(CallContext)中(middle),程序員在(exist)應用(use)中(middle)可以(by)通過FlowBox.GetFlowBox來(Come)獲得與應用(use)實例相關的(of)FlowBox,并将某些環境參數放置其中(middle);當發生(born)方法調用(use)時(hour),FlowBox随CallContext流到(arrive)被調用(use)的(of)方法中(middle),被調用(use)的(of)方法就可以(by)獲得FlowBox中(middle)的(of)數據。CallContext可以(by)進行本地(land)跨程序域流動,也可以(by)在(exist)分布式程序域中(middle)(即多層應用(use)間)流動。 當需要(want)在(exist)分布式程序域中(middle)流動時(hour),CallContext中(middle)的(of)對象必須是(yes)可序列化并且繼承了(Got it)某些指定接口,漂流箱FlowBox就是(yes)這(this)種對象,其屬性包括應用(use)标識名、UI用(use)戶、客戶端地(land)址、經認證的(of)令牌等。 應用(use)開發基礎框架TeleFramework主要(want)包含以(by)下工具類,從而爲(for)項目開發團隊将用(use)戶需求轉換爲(for)最終的(of)産品提供規範、快捷的(of)支持 代碼生(born)成工具(Telegnosis.Util.CodeGen.Windows): 代碼生(born)成工具啓動命令被集成到(arrive)Visual Studio的(of)解決方案資源窗口的(of)右鍵菜單中(middle),使用(use)這(this)種方式啓動後,代碼生(born)成工具可以(by)自動獲得命名空間以(by)及上(superior)次配置時(hour)記錄的(of)數據庫連接字符串,生(born)成後的(of)代碼自動被加到(arrive)選定的(of)項目中(middle)。 代碼生(born)成工具生(born)成以(by)下文件,Model類,Proc類,Dao類,Dto類,其中(middle)Dao類與Dto類由工具生(born)成後,不(No)需程序員改動其中(middle)的(of)代碼,當數據表結構發生(born)變更時(hour),重新生(born)成即可。Model類中(middle)可由程序員按照實際需要(want)定業屬性,對用(use)戶界面的(of)顯示提供支持;Proc類中(middle)提供GetList、AddModel、ModifyModel、RemoveModel等對記錄操作(do)的(of)基本方法,程序員須在(exist)Proc中(middle)自行添加複雜業務邏輯的(of)處理代碼,以(by)滿足實際需要(want)。
用(use)戶UI基類(Telegnosis.Framework.UI.Util):
  對框架中(middle)的(of)異常進行封裝,其中(middle)幫助類ExceptionHelper封裝了(Got it)異常處理的(of)方法入口。
用(use)戶UI基類(Telegnosis.Framework.UI.Util):
  完成對頁面基類的(of)封裝。繼承自該基類的(of)頁面需經過授權認證,方能爲(for)用(use)戶訪問;同時(hour),提供對頁面控件(Tag屬性)的(of)解析,完成數據提交時(hour)的(of)完整性校驗。 用(use)戶UI配置工具(Telegnosis.Framework.UI.UIAddIn): 用(use)戶UI工具啓動命令被集成到(arrive)Visual Studio的(of)解決方案窗體的(of)右鍵菜單中(middle),對由用(use)戶UI基類Telegnosis.Framework.UI.Util.BasePage繼承的(of)窗體,提供對頁面控件的(of)數據綁定,所設置的(of)數據綁定寫入控件的(of)Tag屬性,最終被頁面解析,如下圖 其中(middle),紅色标記的(of)控件說明未設置相應的(of)Tag屬性,未與數據表字段所對應的(of)屬性進行數據綁定。 在(exist)Telegnosis.Framework.UI.Util.BasePage基類中(middle),定義了(Got it)LoadValue、SetValue的(of)方法,完成數據對象屬性與頁面控件值之間的(of)數據轉換與存儲。 文檔庫用(use)戶控件(Telegnosis.Util.DocLib.Windows): 文檔庫用(use)戶控件中(middle)自定義了(Got it)兩個(indivual)用(use)戶控件:單文檔管理控件、多文檔管理控件。爲(for)程序員提供了(Got it)方便、快捷的(of)文檔管理(查看、上(superior)傳、下載)功能的(of)開發,提高了(Got it)程序員的(of)代碼開發效率,規範了(Got it)文檔管理的(of)功能開發。此外,所上(superior)傳的(of)文檔使用(use)文檔庫進行管理,提高了(Got it)文檔訪問的(of)安全性。
用(use)戶UI基類(Telegnosis.Framework.UI.Util):
  對框架中(middle)的(of)異常進行封裝,其中(middle)幫助類ExceptionHelper封裝了(Got it)異常處理的(of)方法入口。
用(use)戶UI配置工具(Telegnosis.Framework.UI.UIAddIn):
  用(use)戶UI工具啓動命令被集成到(arrive)Visual Studio的(of)解決方案窗體的(of)右鍵菜單中(middle),對由用(use)戶UI基類Telegnosis.Framework.UI.Util.BasePage繼承的(of)窗體,提供對頁面控件的(of)數據綁定,所設置的(of)數據綁定寫入控件的(of)Tag屬性,最終被頁面解析,如下圖 其中(middle),紅色标記的(of)控件說明未設置相應的(of)Tag屬性,未與數據表字段所對應的(of)屬性進行數據綁定。 在(exist)Telegnosis.Framework.UI.Util.BasePage基類中(middle),定義了(Got it)LoadValue、SetValue的(of)方法,完成數據對象屬性與頁面控件值之間的(of)數據轉換與存儲。
文檔庫用(use)戶控件(Telegnosis.Util.DocLib.Windows):
  文檔庫用(use)戶控件中(middle)自定義了(Got it)兩個(indivual)用(use)戶控件:單文檔管理控件、多文檔管理控件。爲(for)程序員提供了(Got it)方便、快捷的(of)文檔管理(查看、上(superior)傳、下載)功能的(of)開發,提高了(Got it)程序員的(of)代碼開發效率,規範了(Got it)文檔管理的(of)功能開發。此外,所上(superior)傳的(of)文檔使用(use)文檔庫進行管理,提高了(Got it)文檔訪問的(of)安全性。
版權所有(have) 2008 上(superior)海協遠信息科技有(have)限公司        京ICP證000000号
CopyRight©2008 Shanghai Telegnosis Information Technology L.td.