CTK框架介绍

CTK框架介绍转(http://blog.csdn.net/xinqidian2015/article/details/50537325)CTK插件框架可以简单的描述为C++的动态组件系统DesignCTK插件框架的设计有很大的灵感来自OSGi并且使得应用程序由许多不同的组件组合成一个可扩展模型。这个模型允许通过那些组件间共享对象的服务通信。框架的分层模型被展示在图片1中包括:P

大家好,又见面了,我是你们的朋友全栈君。

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

CTK插件框架可以简单的描述为C++的动态组件系统

Design

CTK插件框架的设计有很大的灵感来自OSGi并且使得应用程序由许多不同的组件组合成一个可扩展模型。这个模型允许通过那些组件间共享对象的服务通信。

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

CTK框架介绍

Plugins–插件是开发者创建的CTK组件

Services Layer–用动态的方式连接插件通过提供为C++对象提供一个发布-查找-绑定模型。

Life Cycle Layer–install,start,stop,update和uninstall插件的API.

Security–处理安全方面(还不能使用)

更多的这些概念的细节解释可以在下面找到。

Plugins

CTK插件是他的核心,一个基于Qt Plugin系统的共享库。另外在CTK库中默认被隐藏的符号跨所有平台。第一步模块化是关于那些保持局部并且不共享。你共享的东西越少,需要做的错误假设就越少。然而,没有分享就没有合作。CTK插件通常值共享符号(类和函数)来支持CTK的服务模型。

Services

一个在C++中的协作模型通常会使用工厂模式。不同的工具包使用不同的模式和API来访问这样的工厂。通常,决定使用哪种工厂实现是重要的。更进一步来说,代码实现通常不能宣传它的实用性,也不能宣传用户列表可能的实现和挑选最合适的那个。工厂一般不是动态的,一旦一个实现的实例被注册,它不能撤回。最终地,如果很多不同的工厂在使用中,没有集中概述你代码绑定的实现。

这些问题的一种解决方案是CTK服务注册.一个插件可以创建一个对象并且使用CTK服务在一个或多个接口中注册它。另外的插件可以向registry要求所有的使用特定接口注册的服务列表。一个插件甚至可能等待一个特殊的服务出现然后回调。

因此一个插件可以注册一个服务,它可以获取一个服务并且也可以监听直到一个服务出现或者消失。任意数量的插件可以使用相同的接口注册服务并且任何数量的插件都可以获取相同名字的服务看图片2.

CTK框架介绍

如果多个插件用相同的接口注册对象,它们可以用属性来区分。每一个服务注册有一组标准和自定义的属性。你可以使用一个语言表达式过滤器来筛选你感兴趣的服务。属性可以被其他角色使用在应用程序级别。

由于服务是动态的,一个插件可以决定从注册表中撤销它的服务当其他插件还在使用的时候。使用这样一个服务的插件必须确保她们不再使用服务对象并且丢弃任何指向它的指针。这可能听起来像一个很大的额外的复杂性但是使用帮助累比如ctkServiceTracker并且一个像Declarative Services的框架可以使得这个过程简单并且获取很大的优势。服务的动态特性允许安装和卸载插件而其他插件保持功能。它也可以模拟真实世界的问题这样的问题不是静态的。例如在一个分布式的环境中一个服务可能模拟一个终端的连接并且如果连接到远程机器,服务将被撤销。更进一步,动态解决了初始化问题。使用CTK插件的应用程序不需要一个指定的开始顺序在它们的插件中。

尽管service registry接受任何基于QObject的对象作为服务,实现重用的最好的办法是使用标准接口注册这些对象从客户端代码中实现解耦。因此CTK插件框架提供了许多标准接口被设计的接近在OSGi中发布的服务规范。这些标准的服务细节在规范和wiki中描述。

Deployment

CTK插件框架也可以被用来作为你应用程序逻辑的主要容器,但是它也可以嵌入到你已存在的框架中。框架的管理通过提供简单的API来标准化,允许插件install,start,stop和update其他插件,也可以枚举插件和它们服务的用法。API也可以通过所谓的management agents来控制插件框架。管理代理可以和命令行,图形桌面应用或者AJAX应用一样。

Benfits

CTK插件框架基于OSGi的原则和API。同样地它继承了一个非常成熟的和完全被设计的组件系统被用来在Java世界中创建高度复杂的应用。它也带有基于Qt的C++程序的优势。下面列表获取自使用OSGi的好处和使用CTK的上下文。

Reduced Complexity降低复杂度

用CTK插件框架开发意味着开发插件。它们从其他插件隐藏内部并且通过定义好的服务交流。隐藏内部意味着之后有更多改变的自由。这不仅减少了bug数量也使得插件开发更简单因为正确的插件实现一块功能通过定义好的接口。

Reuse

标准化的组件模型使得它更容易使用第三方的组件。

Real World

CTK插件框架是动态的。它可以更新插件并且服务来去自如。有数量惊人的真实世界场景匹配这个动态服务模型。应用程序可以复用这个强大的service registry在它们自己的领域内。这不仅节省编写代码,它也提供了全局的可见性,调试工具和更多的功能比起一个专门的解决方案。在这样一个动态化境中编写代码听起来就像噩梦但是幸运地是这有支持的类和框架可以免除即使不是全部也是大部分。

Easy Deployment

CTK插件框架不仅仅是一个标准的组件,也指定了组件如何被安装和管理。可以通过插件使用API来提供一个管理代理。这个管理代理可以像命令行,图形桌面应用,一个Amazon的EC2W云计算接口,或者一个IBM Tivoli管理系统。标准化的管理API使得在现有和未来的系统集成CTK插件框架变得很容易。

Dynamic Updates动态更新

使用的OSGi组件模型是一个动态模型。插件被安装,启动,停止,更新和卸载而不用降低整个系统。

Adaptive

使用的OSGi组件模型被设计来自底层允许混合和匹配组件。这要求组件的依赖关系需要被指定并且它需要生活在一个环境中,他们的可选组件依赖关系并不总是可用的。服务注册表是一个动态的插件注册表,获取和监听服务。这种动态服务模型允许插件发现在系统中什么功能可以被使用和适应它们提供的功能。这使得代码更灵活并且更易于改变。

Transparency

插件和服务是一等公民在CTK插件环境中。管理API提供了访问插件内部状态还有如何跟其他插件连接。部分应用程序可以被停止来调试一个特定的问题或者诊断被带来的插件。

Versioning

在CTK插件框架中所有的插件都有版本号并且只有插件,可以连接在一起合作

Simple

CTK插件API是十分简单的。核心API少于25个类。核心API是足够的对写插件,安装它们,启动,停止,更新和卸载它们并且包含了所有的监听类。

Lazy

在软件中lazy是好的并且OSGI使用的技术有很多机制只有在需要的时候才做。例如插件可以被启动但是她们也可以被配置只有当其他插件使用它们的时候再启动。服务可以被注册但是只有它们被使用的时候才创建。这些lazy场景可以节省巨大的运行成本

Humble

CTK插件框架不接管你的整个程序.乜可以选择暴露提供功能只是你程序的一部分,或者甚至运行多个框架实例在相同的进程中。

Non Intrusive

在CTK插件环境中的应用程序被留给它们自己。她们可以使用任何功能没有框架限制它们。对CTK服务没有特殊的接口要求,每一个QObject可以充当一个服务并且每个类都可以充当一个接口。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134995.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • android自动画廊,Android3D画廊效果与自动轮播Banner

    android自动画廊,Android3D画廊效果与自动轮播Banner最开始项目需要使用3D画廊效果作为首页轮播,网上找了半天也没有比较满意的,最终决定自己写一个。本控件采用的是viewpager完成的,支持无限滑动的3D视觉的画廊效果、平面普通广告栏轮播。提供对外方法:指示器图片自定义、小图片位置、是否圆角等。本代码已托管到[github]https://github.com/lzjin/ViewPagerGallery1、先看效果图:gif1.gifgif2….

  • 什么是td-scdma_TR缩写

    什么是td-scdma_TR缩写3GPP 3rd Generation PartnershipProject 第三代移动通信伙伴组织AAAAntenna Array 天线阵AALATM Adaptation Layer ATM适配层AAL2ATM Adaptati

  • idea激活码永久【注册码】

    idea激活码永久【注册码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 华为拍月亮申请专利;魅族黄章回应李楠离职;GoLand 2019.2 Beta 发布 | 极客头条…

    华为拍月亮申请专利;魅族黄章回应李楠离职;GoLand 2019.2 Beta 发布 | 极客头条…快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持。「CSDN极客头条」,是从CSDN网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道。风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流。整理|胡巍巍责编|屠敏快讯速知 华为为拍月亮申请专利,详细介绍其中原理 连吃9张罚单仍不整改,上海…

  • ITextPDF7

    ITextPDF7ITextPDF前言版本说明itext7-core=7.1.13相关链接:itextpdf官网地址:https://itextpdf.com/enitextpdf官方文档:https://kb.itextpdf.com/home/it7kbitextpdf官方github地址:https://github.com/itext/itext7itextpdfmaven地址:https://mvnrepository.com/artifact/com.itextpdf/itext

  • MATLAB 矢量图(风场、电场等)标明矢量大小的方法——箭头比例尺及风矢杆图的绘制

    MATLAB 矢量图(风场、电场等)标明矢量大小的方法——箭头比例尺及风矢杆图的绘制作者:中国科学院大气物理研究所律成林MATLAB中标明矢量图中矢量大小的方法:绘制箭头比例尺,或绘制风矢杆图。m_vec函数绘制的箭头长度仅与矢量大小本身有关。本人基于m_vec绘制结果,开发了一个可以在Figure内任意位置为指定的矢量图绘制箭头比例尺的函数——m_arrow_scale2,本文已包含该函数的代码,该函数考虑了方方面面,如文本标注、位置、字体等参数,且预设了很多参数供使用者选择,选择余地非常多,使用起来非常方便,功能也较为强大。本着“授人以渔”的原则,倾注了本人对MATLAB深刻理解。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号