国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

CTK框架介紹

2019-11-10 17:06:05
字體:
來源:轉載
供稿:網友

轉(http://blog.csdn.net/xinqidian2015/article/details/50537325)

CTK插件框架可以簡單的描述為C++的動態組件系統

DesignCTK插件框架的設計有很大的靈感來自OSGi并且使得應用程序由許多不同的組件組合成一個可擴展模型。這個模型允許通過那些組件間共享對象的服務通信。

框架的分層模型被展示在圖片1中包括:

Plugins--插件是開發者創建的CTK組件Services Layer--用動態的方式連接插件通過提供為C++對象提供一個發布-查找-綁定模型。Life Cycle Layer--install,start,stop,update和uninstall插件的API.Security--處理安全方面(還不能使用)更多的這些概念的細節解釋可以在下面找到。PluginsCTK插件是他的核心,一個基于Qt Plugin系統的共享庫。另外在CTK庫中默認被隱藏的符號跨所有平臺。第一步模塊化是關于那些保持局部并且不共享。你共享的東西越少,需要做的錯誤假設就越少。然而,沒有分享就沒有合作。CTK插件通常值共享符號(類和函數)來支持CTK的服務模型。Services一個在C++中的協作模型通常會使用工廠模式。不同的工具包使用不同的模式和API來訪問這樣的工廠。通常,決定使用哪種工廠實現是重要的。更進一步來說,代碼實現通常不能宣傳它的實用性,也不能宣傳用戶列表可能的實現和挑選最合適的那個。工廠一般不是動態的,一旦一個實現的實例被注冊,它不能撤回。最終地,如果很多不同的工廠在使用中,沒有集中概述你代碼綁定的實現。這些問題的一種解決方案是CTK服務注冊.一個插件可以創建一個對象并且使用CTK服務在一個或多個接口中注冊它。另外的插件可以向registry要求所有的使用特定接口注冊的服務列表。一個插件甚至可能等待一個特殊的服務出現然后回調。

因此一個插件可以注冊一個服務,它可以獲取一個服務并且也可以監聽直到一個服務出現或者消失。任意數量的插件可以使用相同的接口注冊服務并且任何數量的插件都可以獲取相同名字的服務看圖片2.

如果多個插件用相同的接口注冊對象,它們可以用屬性來區分。每一個服務注冊有一組標準和自定義的屬性。你可以使用一個語言表達式過濾器來篩選你感興趣的服務。屬性可以被其他角色使用在應用程序級別。由于服務是動態的,一個插件可以決定從注冊表中撤銷它的服務當其他插件還在使用的時候。使用這樣一個服務的插件必須確保她們不再使用服務對象并且丟棄任何指向它的指針。這可能聽起來像一個很大的額外的復雜性但是使用幫助累比如ctkServiceTracker并且一個像Declarative Services的框架可以使得這個過程簡單并且獲取很大的優勢。服務的動態特性允許安裝和卸載插件而其他插件保持功能。它也可以模擬真實世界的問題這樣的問題不是靜態的。例如在一個分布式的環境中一個服務可能模擬一個終端的連接并且如果連接到遠程機器,服務將被撤銷。更進一步,動態解決了初始化問題。使用CTK插件的應用程序不需要一個指定的開始順序在它們的插件中。盡管service registry接受任何基于QObject的對象作為服務,實現重用的最好的辦法是使用標準接口注冊這些對象從客戶端代碼中實現解耦。因此CTK插件框架提供了許多標準接口被設計的接近在OSGi中發布的服務規范。這些標準的服務細節在規范和wiki中描述。DeploymentCTK插件框架也可以被用來作為你應用程序邏輯的主要容器,但是它也可以嵌入到你已存在的框架中??蚣艿墓芾硗ㄟ^提供簡單的API來標準化,允許插件install,start,stop和update其他插件,也可以枚舉插件和它們服務的用法。API也可以通過所謂的management agents來控制插件框架。管理代理可以和命令行,圖形桌面應用或者Ajax應用一樣。BenfitsCTK插件框架基于OSGi的原則和API。同樣地它繼承了一個非常成熟的和完全被設計的組件系統被用來在java世界中創建高度復雜的應用。它也帶有基于Qt的C++程序的優勢。下面列表獲取自使用OSGi的好處和使用CTK的上下文。Reduced Complexity降低復雜度用CTK插件框架開發意味著開發插件。它們從其他插件隱藏內部并且通過定義好的服務交流。隱藏內部意味著之后有更多改變的自由。這不僅減少了bug數量也使得插件開發更簡單因為正確的插件實現一塊功能通過定義好的接口。Reuse標準化的組件模型使得它更容易使用第三方的組件。Real WorldCTK插件框架是動態的。它可以更新插件并且服務來去自如。有數量驚人的真實世界場景匹配這個動態服務模型。應用程序可以復用這個強大的service registry在它們自己的領域內。這不僅節省編寫代碼,它也提供了全局的可見性,調試工具和更多的功能比起一個專門的解決方案。在這樣一個動態化境中編寫代碼聽起來就像噩夢但是幸運地是這有支持的類和框架可以免除即使不是全部也是大部分。Easy DeploymentCTK插件框架不僅僅是一個標準的組件,也指定了組件如何被安裝和管理??梢酝ㄟ^插件使用API來提供一個管理代理。這個管理代理可以像命令行,圖形桌面應用,一個Amazon的EC2W云計算接口,或者一個IBM Tivoli管理系統。標準化的管理API使得在現有和未來的系統集成CTK插件框架變得很容易。Dynamic Updates動態更新使用的OSGi組件模型是一個動態模型。插件被安裝,啟動,停止,更新和卸載而不用降低整個系統。Adaptive使用的OSGi組件模型被設計來自底層允許混合和匹配組件。這要求組件的依賴關系需要被指定并且它需要生活在一個環境中,他們的可選組件依賴關系并不總是可用的。服務注冊表是一個動態的插件注冊表,獲取和監聽服務。這種動態服務模型允許插件發現在系統中什么功能可以被使用和適應它們提供的功能。這使得代碼更靈活并且更易于改變。Transparency插件和服務是一等公民在CTK插件環境中。管理API提供了訪問插件內部狀態還有如何跟其他插件連接。部分應用程序可以被停止來調試一個特定的問題或者診斷被帶來的插件。Versioning在CTK插件框架中所有的插件都有版本號并且只有插件,可以連接在一起合作SimpleCTK插件API是十分簡單的。核心API少于25個類。核心API是足夠的對寫插件,安裝它們,啟動,停止,更新和卸載它們并且包含了所有的監聽類。Lazy在軟件中lazy是好的并且OSGI使用的技術有很多機制只有在需要的時候才做。例如插件可以被啟動但是她們也可以被配置只有當其他插件使用它們的時候再啟動。服務可以被注冊但是只有它們被使用的時候才創建。這些lazy場景可以節省巨大的運行成本HumbleCTK插件框架不接管你的整個程序.乜可以選擇暴露提供功能只是你程序的一部分,或者甚至運行多個框架實例在相同的進程中。Non Intrusive在CTK插件環境中的應用程序被留給它們自己。她們可以使用任何功能沒有框架限制它們。對CTK服務沒有特殊的接口要求,每一個QObject可以充當一個服務并且每個類都可以充當一個接口。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宝兴县| 台州市| 当阳市| 泾阳县| 涟源市| 阜康市| 蕉岭县| 云阳县| 寻甸| 沂南县| 施秉县| 唐山市| 峨山| 凤冈县| 霍邱县| 桓仁| 二连浩特市| 通许县| 南安市| 凌云县| 南投市| 鹤庆县| 峡江县| 中牟县| 朔州市| 屏南县| 金乡县| 鄂州市| 南溪县| 大厂| 漳浦县| 通渭县| 广昌县| 宜阳县| 鹿邑县| 福清市| 吉林市| 浮梁县| 桓台县| 万山特区| 彝良县|