<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/eclipse-rcp-and-more-details/</link>
<title><![CDATA[Eclipse RCP技术详解]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[编程杂谈]]></category>
<pubDate>Sat, 25 Sep 2010 15:38:45 +0000</pubDate> 
<guid>https://www.heckjj.com/eclipse-rcp-and-more-details/</guid> 
<description>
<![CDATA[ 
	<span style="font-family: 微软雅黑;"><span style="font-size: 14px;"><strong><span style="color: #4169E1;">1、引言</span></strong> </span><br/>Eclipse是一个开放源代码的、基于Java的可扩展的开发平台。就其本身而言，它只是一个框架、一组服务，用于通过插件来构建开发环境。当我 们提到Eclipse的时候，许多Java开发者的第一反应就是那个性能良好，界面漂亮，Debug功能奇佳的Java集成开发平台。<br/><br/>无可否认，Eclipse常常作为一款优秀的IDE （Integrated Development Environment，集成开发环境）出现在开发者面前的。它不仅仅是Java的IDE，还可以是C语言的IDE、Python的IDE——只要开发出 相应语言的插件，Eclipse就可以成为任何语言的IDE。但是，这些严格来说都是Eclipse RCP的应用。真正的Eclipse，是一个提供了一个完善的插件机制RCP（Rich Client Platform，胖客户端平台）平台；它以SWT/JFace作为界面元素组件，提供给用户一个名为Workbench的UI平台；加上它本身优秀的插件机制，它能够构造出扩展能力强、性能优秀、并能提供给用户良好UI体验的服客户端平台。<br/><br/><span style="font-size: 14px;"><strong><span style="color: #4169E1;">2、Eclipse RCP简介</span></strong> </span><br/><br/>Eclipse RCP是一项位于Eclipse平台核心的功能。大多数人想到Eclipse时，会想到Java集成开发环境(IDE)。如果将Eclipse中关于 IDE的内容剥去，剩下的就是一个提供基本工作台功能的核心，包括对可移动以及可叠加的窗口组件(编辑器和视图)、菜单、工具栏、按钮、表格、树形结构等 等的支持，而这个核心就是Eclipse RCP。</span><span style="font-family: 微软雅黑;"><br/><br/>个人理解Eclipse RCP就是由插件开发转向桌面应用开发，构建最小化的Eclipse平台(8M)运行你的桌面应用，不必再为程序框架烦心，摆脱失败的AWT和Swing，让程序拥有专业级效果，而实现又很简单、很优雅。<br/><br/>RCP提供了丰富的界面控件，这使得基于 Java 开发桌面应用也变得容易了很多，虽然仍然不能和基于VB、Delphi进行相比。对于开发者而言，尽管使用 RCP 也是为了开发桌面应用，但 RCP 给开发者带来的更多的感觉是在它充分发挥了插件化系统的优势， RCP 可以视为基于 OSGi（Open Service Gateway Initiative） 构建插件化系统的最佳实践的指导，从 RCP 的设计中，可以学习到如何将应用做到模块化、将应用做到动态化，甚至还可以学习到如何自动生成界面这样的设计思想。 RCP 可以看做是基于 OSGi 做插件化应用系统的最佳实践，其中的不少设计方法甚至都可以整理成为基于 OSGi 做插件化应用系统的设计模式，让我们进入 RCP 之旅，揭开面纱，一探其本质吧！相信大家在了解了 RCP 的设计思想，看过其代码后，不得不对 RCP 表示崇高的敬意，大师之作，不同凡响。<br/><br/>Eclipse RCP为应用程序开发人员提供了：<br/><br/>◆应用程序和特性的一致且本地的外观；<br/><br/>◆公共应用程序服务，例如窗口管理、更新管理、帮助和选择管理；<br/><br/>◆本地的外观，利用Windows、Mac OS X、Linux、Solaris、HP-UX、AIX和嵌入式设备上的实际平台窗口部件；<br/><br/>◆标准化的组件模型；<br/><br/>◆普及的可扩展性；<br/><br/>◆整合的更新机制；<br/><br/>◆顶级开发工具(Eclipse 软件开发包(SDK)是世界级的软件开发环境)。<br/><br/>Eclipse RCP项目用SWT图形库和工具包取代了Java标准中的AWT和Swing。SWT直接调用了操作系统的图形库，从而使得Java应用程序的LOOK &amp; Feel 与操作系统的习惯完全一致；更为重要的是，对本地方法的直接调用大幅度的提高了基于SWT 的Java应用程序的运行速度。SWT 的缺点主要在于两点：(1) 不是Java语言标准； (2) 支持的平台太少。<br/><br/><span style="font-size: 14px;"><strong><span style="color: #4169E1;">3、Eclipse RCP体系结构</span></strong> </span><br/><br/>一个Eclipse RCP可分为如下五个部分，如下图所示：<br/><a href="http://www.xland.com.cn/up/pic/0704065155100/0.jpeg" target="_blank"><img src="http://www.xland.com.cn/up/pic/0704065155100/0.jpeg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>图1 <br/><br/>（1）Wrokbench工作台<br/><br/>为Eclipse提供用户界面。它是使用SWT（Standard Widget Toolkit）和一个更高级的API（JFace）来构建的；SWT是Java的Swing/AWT GUI API的非标准替代者，JFace则建立在SWT基础上，提供用户界面组件。<br/><br/>（2）Workspace工作区<br/><br/>工作区是负责管理用户资源的插件。它包括用户创建的项目、项目中的文件，以及文件变更和其它资源。工作区还负责通知其它插件关于资源变更的信息，比如文件创建、删除或者变更。<br/><br/>（3）Help帮助系统<br/><br/>帮助组建具有与Eclipse平台本身相当的可扩展能力。与插件向Eclipse添加功能相同，帮助提供一个附加的导航结构，允许工具以HTML文件的形式添加文档。<br/><br/>（4）Team团队支持系统<br/><br/>团队支持组件负责提供版本控制和配置管理支持。它根据需要添加视图，以允许用户与所有使用的任何版本控制系统交互。大多数插件都不需要与团队支持组件交互，除非它们提供版本控制服务。<br/><br/>（5）Platform Runtime运行平台<br/><br/>平台运行库是整个Eclipse的内核，它在启动时检查已安装了哪些插件，并创建关于它们的注册表信息。为降低启动时间和资源使用，它在实际需要某个插件的时候才加载该插件。除了内核外，其它每样东西都是作为插件来实现的。<br/><br/>Eclipse最明显的一大优点就是即插即用、即删即无。在构建插件化的应用系统的时候，我们通常希望做到以下三点： <br/><br/>（1）通过增加插件来动态扩展系统功能，包括功能的入口等，最重要的就是不要因为增加了新的插件，而导致对原插件的修改，做到即插即用， OSGi 本身提供了基于插件动态扩展系统功能的支持，但是否可以真的做到即插即用，是否可以不导致对原插件的修改，这个还是要看设计者的功力； <br/><br/>（2）通过删除插件来动态移除系统功能，包括功能的入口等，最重要的就是要让插件的卸载不影响到系统的运行，这个和 1 里面所说的情况也是一样的， OSGi 是可以支持这样的要求，但应用系统是否能做到还是看设计者的功力； <br/><br/>（3）通过增加或更新插件来动态改变系统行为。 <br/><br/>RCP基于OSGi来保证其插件化以及动态化可实现的情况下，还定义了扩展点的机制，而正是因为扩展点的机制，使得 RCP 在设计角度上能够更好的达到我们构建插件化应用系统的前两个目标，同时 RCP 通过其对桌面应用支撑的设计为我们展示了扩展点的最佳实践方法，将界面按照对象的思想进行划分，在划分的过程中根据职责形成插件，暴露出扩展点，最后形成 了像树一样的结构体系，如图所示： <br/><a href="http://www.xland.com.cn/up/pic/0704065155100/1.jpeg" target="_blank"><img src="http://www.xland.com.cn/up/pic/0704065155100/1.jpeg" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>图2 <br/><br/><br/>这种设计方法最佳的一个地方就在于充分的做到了真正的即插即用、即删即无的情况，典型的例子就是在 RCP 中可以通过扩展实现 Perspective ，将这个插件安装上后就可以在 RCP 中看到这个 Perspective ，删除这个插件后 RCP 中自然就看不到这个 Perspective 了。 <br/><br/>从 RCP 的结构体系上，可以看出 RCP 在基于扩展点的设计思想上是怎么去设计的，它的设计思路采取的就是从顶至下、按照职责进行划分、形成插件的方法，插件中需要支持动态扩展的部分则做成扩展点，从而形成一个非常容易扩展的开发平台。 <br/><br/>即插即用、即删即无的支持使得系统可以很好的以插件的方式来进行组装，做系统的时候就象在种树，先把系统的根撒下，让根长出主干，在主干上培育出枝 叶，枝叶上结出果实，整颗树就这么培育成了，当不需要了某个果实的时候，把它摘下来吃了，当不需要了某颗枝叶的时候，把那颗枝叶砍了，而这都不会影响到主 干，当希望树上形成别的果实的时候，甚至都可以接上不同的枝叶，让它长出不一样的果实。<br/><br/><span style="font-size: 14px;"><strong><span style="color: #4169E1;">4、总结</span></strong> </span><br/><br/>目前，基于Eclipse开发的插件非常多，涉及到软件领域的各个方面。但是，基于Eclipse RCP开发的独立软件并不常见，其中比较著名的几款Eclipse RCP软件有：<br/><br/>JLabrary：开源的CMS系统，用Eclipse RCP实现客户端；<br/><br/>NOA Office Integration Editor：将Open Office集成到RCP上的一款办公软件；<br/><br/>Nomad PIM：一款建议的个人信息管理系统，可以对个人信息，例如日程、支出、日记等进行管理。<br/><br/>感兴趣的读者可以下载这些软件的源代码进行学习。另外Eclipse本身也具有十分详细的RCP开发帮助文档（都是英文的），充分利用这些资源将大大加快Eclipse RCP开发。</span><br/>Tags - <a href="https://www.heckjj.com/tags/eclipse/" rel="tag">eclipse</a> , <a href="https://www.heckjj.com/tags/rcp/" rel="tag">rcp</a>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/eclipse-rcp-and-more-details/#blogcomment</link>
<title><![CDATA[[评论] Eclipse RCP技术详解]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/eclipse-rcp-and-more-details/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>