RCP最灵活的模块组织方式

简介:
文/陈刚 from  www.ChenGang.com.cn  at 2006年4月29日 (转载请标明出处)

起因是这样的,有一个已经开发了比较多功能的RCP程序,它包含这样几个模块:JMX浏览器(类似于MC4J的功能)、系统事件监控器、权限控制框架等。这些模块是写在一个RCP项目中的。

现在,我想更灵活些。比如,JMX浏览器模块这个是通用的,但如果谁要使用这个功能,就必须运行整个RCP项目才行,而我希望这个JMX模块是可简单装卸的。充分运行Eclipse的插件机制,让各模块成为一个独立的插件,应该可以实现这个功能。

比如,JMX模块形成一个独立的插件:它既可以让其他人当做一个普通插件,安装到Eclipse中;也可以成为一个模块,插入我RCP项目中来。这样的设计,让模块的开重用性变得很高了。

这个想法中,RCP部份,仅仅成为一个空壳,提供更插件的插入机制。这个方案特别适合那种想把原有插件项目,改装成RCP而发布的项目,基本上原有插件无需做改动。

然而这个想法是否可行呢?
(1) 插件能否想插入到Eclipse,插入到RCP空壳项目中?
(2) 插件中的如果存在依赖关系(比如,一个插件需要用到另一个插件的代码),怎么实现。
(3) 插件依然的JAR包怎么处理。比如有三个插件都要用到log4j.jar来输出日志,如果把log4j.jar放在插件项目的lib目录来使用的话,log4j.jar在三个插件各有一份,就会有三份。当三个插件合到RCP项目中时,就有两个log4j是冗余的。这会增在RCP项目的大小。
(4) RCP项目有一些界面元素须要根据插入的插件,做相应的变化。怎么实现?


为了验证第(1)点,我做了这个实验:

创建一个很简单的插件项目,此插件项目包含一个很简单的透视图。我要看看这个透视图能否出现在RCP项目中的。很顺便,当我把插件项目导出后,安装到RCP项目的plugin目录,再运行RCP项目,发现这个插件项目的透视图出现在了RCP项目的透视图列表中。

如果是开发时,我希望运行RCP项目时,就能看到插件项目插入进来后的效果。实现也不难,步骤如下:
(1) 在Plugin.xml的dependencies项,把插件项目加入到Required Plug-ins中。(表示项目的依赖)
(2) 在run..里的Plug-ins项,选择插件项目和RCP项目,并单击Add Required Plug-ins(表现运行时的依赖)


为了验证第(2)点,我做了这个实验:
在插件项目中创建一个类,在RCP项目中使用这个类,这时还是找不到类的。解决办法是:在打开插件项目的plugin.xml-->runtime选项卡-->Exported Packages(输出的包),把这个类所在的包加入进来。这下RCP项目可以使用插件项目的类了。

关于第(3)点,我没有做实验,我的想法是:把jar包封装成插件(可参考eclipse对junit的封装),从而将项目对JAR包的依赖,转变成对插件的依赖。

关于第(4)点,我没有做实验,我的想法是:通过自定义RCP项目的扩展点来实现。


在我这个项目分解模块还会遇到这样的问题:权限安全模块是影响到整个RCP项目的,但JMX模块独立出来后,显然不是必须要权限安全模块的。怎么解除这种依赖关系呢。我看是解除不了的了,但可以设一个开关,让权限安全模块失效。这样虽然代码和权限安全模块有依赖,但可以把权限检查的功能关闭。


总结:

这种方式虽然灵活,但也是有代价的---编程和项目管理更复杂了。
目录
相关文章
|
8月前
|
C# 开发者
C# 10.0中的文件范围命名空间:简化代码组织的新方式
【1月更文挑战第18天】C# 10.0引入了文件范围的命名空间,这是一种新的语法糖,用于更简洁地组织和管理代码。文件范围命名空间允许开发者在每个文件的基础上定义命名空间,而无需显式使用花括号包裹整个文件内容。本文将深入探讨文件范围命名空间的工作原理、使用场景以及它们为C#开发者带来的便利。
|
项目管理
解析PMP项目组合管理
项目管理专业人士都知道,PMP(项目管理专业人员)认证是一个广泛认可的资格,它强调了在项目管理中的最佳实践和标准。然而,PMP涉及的不仅仅是独立项目的管理,还包括了项目组合的管理。在本文中,我们将深入探讨PMP项目组合管理的重要性、原则和关键概念。
|
2月前
|
监控 Kubernetes 安全
如何设置一个有效的远程管理工具来简化服务器的维护工作?
如何设置一个有效的远程管理工具来简化服务器的维护工作?
|
5月前
|
Shell Python 容器
Python模块是其代码组织和重用的基本方式。
【8月更文挑战第18天】Python模块是其代码组织和重用的基本方式。
44 1
|
5月前
|
缓存 前端开发 JavaScript
【揭秘Rails高手都在用的秘密武器!】—— 资产管道:它是如何悄无声息地改变我们管理前端资源的方式?
【8月更文挑战第31天】资产管道是Ruby on Rails 3.1引入的特性,用于简化Web应用中CSS、JavaScript和图片等前端资源的管理和打包。它将静态资源集中管理并自动处理合并、压缩及版本控制,提升页面加载速度和用户体验。本文通过示例代码详细介绍了如何在Rails应用中配置和使用资产管道,包括创建目录结构、编写样式表和JavaScript文件以及在布局文件中引用静态资源。与传统方法相比,资产管道提供了更高效和自动化的解决方案,有助于提高开发效率和应用性能。
39 0
|
7月前
|
监控 数据处理 开发者
利用Lua代码简化局域网管理软件开发
使用Lua脚本语言可以提升局域网管理软件的开发效率和代码可维护性。示例包括:使用LuaSocket扫描局域网设备;通过动态加载和应用配置文件展示配置管理;利用实时监控功能,当网络流量超过阈值时触发警报;以及通过HTTP POST自动提交监控数据到服务器。Lua的简洁语法和强大功能简化了网络管理和自动化任务。
134 3
|
7月前
|
JavaScript 前端开发
JavaScript模块化将复杂软件分解为独立模块,提高代码可读、维护、复用和扩展性。
【6月更文挑战第27天】模块化将复杂软件分解为独立模块,提高代码可读、维护、复用和扩展性。JavaScript模块化有CommonJS(Node.js,`require()`/`module.exports`)、AMD(RequireJS,异步,`define()`/`require()`)和ES6 Modules(官方标准,`import`/`export`)。打包工具如Webpack、Rollup处理兼容性,使模块能在不同环境中运行。
39 0
|
8月前
|
编译器 API PHP
深入PHP扩展开发:打造高效自定义模块
【4月更文挑战第30天】 在追求性能优化和特定功能实现的道路上,PHP提供了一种强大机制——扩展。本文将引导读者通过编写一个简单的PHP扩展来探索扩展开发的世界。我们将涉及从环境搭建到代码实现,再到扩展的编译与加载的完整流程,确保读者能够理解并实践如何创建高效的自定义PHP模块。
|
8月前
|
数据处理 数据库 开发者
Django中的自定义管理命令:扩展管理功能的途径
【4月更文挑战第15天】Django教程:介绍如何创建和使用自定义管理命令以扩展框架功能。在应用的`management/commands`目录下创建Python文件,继承`BaseCommand`,实现`handle`方法。示例代码展示了如何定义参数和执行逻辑。自定义命令适用于批量数据处理、定期任务、项目初始化和自定义迁移操作。注意文件位置、命令安全性和稳定性。自定义管理命令能提升开发和维护效率。
|
存储 测试技术 数据安全/隐私保护
RobotFrameWork接口项目分层及通用控制方式
RobotFrameWork接口项目分层及通用控制方式
1015 0
RobotFrameWork接口项目分层及通用控制方式

热门文章

最新文章