ctk插件,什么是框架

CTK插件框架可以简单地记述为c的动态组件系统

设计

CTK插件框架的设计从OSGi中获得了巨大的灵感,使得APP应用程序可以通过将许多不同的组件组合在一起而扩展。 在此模型中,可以在这些组件之间共享对象的服务通信。

框架的层次模型被示为在图像1中包括:

plugins插件是开发人员创建的CTK组件

services layer通过动态连接插件为c对象提供发布-搜索-绑定模型。

生命周期层install、start、stop、update和uninstall插件的API。

security处理安全方面尚未可用) )

这些概念的详细说明如下。

Plugins

CTK插件是他的核心,是基于Qt Plugin系统的共享库。 此外,在CTK库中缺省情况下隐藏的元件跨越所有平台。 第一个模块化是关于局部的、不共享的东西。 分享的东西越少,做错误的假设就越少。 但是,没有共享就没有合作。 CTK插件通常使用值共享符号类和函数)来支持CTK的服务模型。

服务

C的协作模型通常使用工厂模式。 每个工具包使用不同的模式和API访问这些工厂。 通常,决定使用哪个工厂来实现是很重要的。 此外,代码实现通常无法宣传其实用性,也无法宣传用户列表的可能实现,并选择最佳的。 工厂一般不是动态的,一旦实现的实例注册,就不能撤回。 最终,如果许多不同的工厂正在使用中,则不会概括代码绑定的实现。

这些问题的解决方案之一是CTK服务注册。 插件可以创建对象并使用CTK服务在一个或多个接口中注册它们。 的插件可以向registry请求使用特定接口注册的所有服务的列表。 插件可能会等待特殊服务的出现和回调。

因此,插件可以注册服务,获取服务,并侦听直到服务出现或消失。 任何数量的插件都可以使用同一界面注册服务,任何数量的插件都可以获得同名的服务并查看图像2。

如果多个插件在同一接口上注册了对象,则可以通过属性来区分它们。 每个服务注册都有一组标准和定制的属性。 可以使用语言表达式过滤器过滤您感兴趣的服务。 属性可以在APP级别用于其他角色。

服务是动态的,因此某些插件可以决定从注册表中取消服务。 如果其他插件仍在使用。 使用此类服务的插件必须确保不再使用服务对象,并且指针将被丢弃。 虽然这听起来像是一个很大的复杂性,但使用ctkServiceTracker和Declarative Services这样的框架可以简化这个过程并带来巨大的好处。 服务的动态功能允许安装和卸载插件,其他插件可以保留其功能。 也可以模拟现实世界的问题。 这样的问题不是静态的。 例如,在分布式环境中,服务模拟终端连接,如果连接到远程机器,服务将被取消。 此外,初始化问题已动态解决。 对于使用CTK插件的APP应用程序,插件不需要指定的启动顺序。

虽然service registry接受基于QObject的对象作为服务,但实现重用的最佳方法是使用标准接口注册这些对象,然后从客户端代码进行去耦。 因此,CTK插件框架提供了许多标准接口,这些接口旨在接近OSGi中公开的服务规范。 规格和wiki中提供了这些标准服务的详细信息。

部署

CTK插件框架也可以用作APP应用逻辑的主要容器,但也可以嵌入现有框架中。 的管理通过提供简单的API进行标准化,还可以列举插件install、start、stop、update的其他插件,以及插件及其服务的使用方法。 API还可以通过所谓的管理代理来控制插件框架。 管理代理与命令行、图形桌面APP应用程序或Ajax APP应用程序相同。

Benfits

CTK插件框架基于OSGi原则和API。 同样,它继承了一个非常成熟、设计完善的组件系统,用于在Java世界中创建高度复杂的APP应用程序。 还有基于Qt的c程序的好处。 以下列表来自使用OSGi的好处和使用CTK的上下文。

精简功能可降低复杂性

用CTK插件框架开发意味着插件的开发。 与其他插件隐藏内部,通过定义的服务进行交流。 隐藏内部意味着之后有更多的变化自由。 这样不仅可以减少错误的数量,还可以通过定义了正确插件的接口实现一个功能,从而简化插件的开发。

结果

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

真实世界

CTK插件框架是动态的。 可以更新插件,自由进行服务。 数量巨大的真实世界场景与这个动态服务模型相匹配。 APP应用程序可以在自己的领域重用这个强大的服务注册。 这不仅节省了代码编写,而且提供了全局可见性,调试工具和其他功能优于一个特殊的解决方案。 在这种动态环境下编写代码听起来像一场噩梦,但幸运的是,这个支持的类和框架可以免除大部分,即使不是全部。

地球部署

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可以充当一个服务并且每个类都可以充当一个接口

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注