知識(shí)點(diǎn)整理參考書(shū)籍必看為了找到好的基于Eclipse 4平臺(tái)之上的書(shū)籍少之又少,國(guó)內(nèi)完全沒(méi)有。國(guó)外的有不多。下面一一列舉:

1. 最好的學(xué)習(xí)去處是一個(gè)培訓(xùn)網(wǎng)站,叫" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 網(wǎng)站運(yùn)營(yíng) > Eclipse e4開(kāi)發(fā)-01-Eclipse RCP介紹

Eclipse e4開(kāi)發(fā)-01-Eclipse RCP介紹

時(shí)間:2023-05-24 14:48:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-05-24 14:48:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)

Eclipse e4開(kāi)發(fā)-01-Eclipse RCP介紹:

原文鏈接

Eclipse RCP

知識(shí)點(diǎn)整理

參考書(shū)籍

必看

為了找到好的基于Eclipse 4平臺(tái)之上的書(shū)籍少之又少,國(guó)內(nèi)完全沒(méi)有。國(guó)外的有不多。下面一一列舉:

1. 最好的學(xué)習(xí)去處是一個(gè)培訓(xùn)網(wǎng)站,叫做Vogella,唯有這個(gè)網(wǎng)站還有些不錯(cuò)的文章和教程。要把這上面所有的教程都學(xué)習(xí)一遍,基本可以入門(mén)了。我這里有離線的pdf,但實(shí)際上還是這個(gè)網(wǎng)站的內(nèi)容。因?yàn)檫@個(gè)網(wǎng)站的內(nèi)容是持續(xù)更新的。

2. Packt.Eclipse.Plug-in.Development.Beginners.Guide.2nd.Edition.pdf, 這本書(shū)需要一定的英文閱讀能力,對(duì)于e4的內(nèi)容不是最多的,但是本書(shū)的好處是有很多例子,書(shū)的結(jié)構(gòu)非常好,理論少實(shí)踐多,與上面的網(wǎng)站比差一些。書(shū)中也是有錯(cuò)漏的,我在學(xué)習(xí)過(guò)程中遇到過(guò),我盡量記錄矯正過(guò)來(lái)。

3. Mastering.Eclipse.Plug-in.Development.pdf,這本書(shū)是Packt.Eclipse.Plug-in.Development.Beginners.Guide.2nd.Edition的高級(jí)篇,為同一作者所著。

4. Eclipse_4_Tutorial.pdf, 這也是官方網(wǎng)站推薦的一篇文章,篇幅不長(zhǎng),但是可以看。

選看

參考鏈接

基于Eclipse應(yīng)用開(kāi)發(fā)介紹

基于Eclipse的應(yīng)用,叫做Eclipse RCP(Eclipse Rich Client Platform),用Eclipse框架來(lái)構(gòu)建獨(dú)立的豐富特性的桌面應(yīng)用。

Eclipse IDE(Integrated Development Environment)可以看作是一種專(zhuān)注于軟件開(kāi)發(fā)的特殊的Eclipse應(yīng)用,比如說(shuō)JDT提供了java開(kāi)發(fā)的集成環(huán)境。

一個(gè)Eclipse應(yīng)用由獨(dú)立的軟件組件構(gòu)成,這里的組件就成為插件(Plug-in),在OSGI概念體系也叫做bundle。因?yàn)镋clipse框架是一個(gè)可擴(kuò)展的框架,因此插件可以擴(kuò)展另外的插件。比如,我們可以創(chuàng)建新的插件來(lái)創(chuàng)建新的菜單或者工具欄,來(lái)擴(kuò)展Eclipse自帶的菜單或者工具欄。

Eclipse IDE作為一個(gè)典型的Eclipse應(yīng)用,使用了一些基本的組件,這些組件的組件用一張圖可以描繪成下面這樣:

1.Eclipse_base_components

概念補(bǔ)充

Eclipse歷史

Eclipse 3, 與OSGI的結(jié)合。 Eclipse 4,把UI變成EMF模型,這些模型通過(guò)POJO表示,然后這些POJO可以依賴注入。另外,e4平臺(tái)的UI可以被諸如CSS來(lái)渲染界面。

插件(Plugin)

為了處理模塊間的依賴關(guān)系,Eclipse提出擴(kuò)展(Extension)和擴(kuò)展點(diǎn)(Extension point)的概念。每一個(gè)希望被別的程序模塊擴(kuò)展的模塊,都必須聲明一系列擴(kuò)展點(diǎn),可以將擴(kuò)展點(diǎn)想象成插座。而希望在這個(gè)模塊上擴(kuò)展功能的程序模塊,就需要按照擴(kuò)展點(diǎn)的聲明來(lái)編寫(xiě)擴(kuò)展,這個(gè)就是擴(kuò)展,就像是插頭。通過(guò)將插頭插入插座,擴(kuò)展獲得了服務(wù)。即擴(kuò)展點(diǎn)提供服務(wù)而擴(kuò)展使用服務(wù)。這叫做聲明與實(shí)現(xiàn)分離。擴(kuò)展點(diǎn)和擴(kuò)展也可以理解成父類(lèi)和子類(lèi)的關(guān)系。

通過(guò)這種機(jī)制,Eclipse平臺(tái)和其他功能組件插接起來(lái),就成了一個(gè)可用的系統(tǒng)。比如平臺(tái)加JDT就成了Java IDE,平臺(tái)加PDT就成了PHP IDE。所以,凡是遵循這一機(jī)制開(kāi)發(fā)出來(lái)的模塊,就叫做插件。這是Eclipse平臺(tái)最重要的技術(shù),一切都是插件??纯船F(xiàn)如今的VSCode也是通過(guò)插件迅速贏得巨大的市場(chǎng)。

<!--Extension Point Declaration --><extension-point id="view" name="org.eclipse.ui.views" schema="schemas/views.exsd" />以上是一個(gè)擴(kuò)展點(diǎn)的聲明,name="org.eclipse.ui.views"就是暴露出一個(gè)擴(kuò)展點(diǎn)。

<!-- Extension Declaration --><extension point="org.eclipse.ui.views"> <view alloMultiple="false" class="com.mycompany.ui.MyView" id="com.mycompany.ui.MyView" name="MyView" />以上是一個(gè)擴(kuò)展的聲明,擴(kuò)展點(diǎn)和擴(kuò)展是通過(guò)"org.eclipse.ui.views"這個(gè)名稱(chēng)關(guān)聯(lián)起來(lái)的,擴(kuò)展point擴(kuò)展點(diǎn),就像插頭插進(jìn)插座。

這也就體現(xiàn)了聲明與實(shí)現(xiàn)分離,因?yàn)楹竺婢唧w的實(shí)現(xiàn)都放在了類(lèi)class="com.mycompany.ui.MyView"里面去實(shí)現(xiàn),盡管在此刻MyView還沒(méi)有誕生。

擴(kuò)展和擴(kuò)展點(diǎn)是Eclipse插件開(kāi)發(fā)的最早實(shí)現(xiàn),也是Eclipse 2就有的技術(shù),通常被稱(chēng)為Eclipse runtime。但是從Eclipse 3開(kāi)始,除了保留Eclipse Runtime的同時(shí),對(duì)OSGI做了實(shí)現(xiàn),新的框架被稱(chēng)為Equinox。

OSGI

OSGI(Open Services Gateway Initiative),開(kāi)放式服務(wù)網(wǎng)關(guān)協(xié)議,是一套基于Java的開(kāi)放式接口協(xié)議。它的思想與Eclipse插件的思想有些類(lèi)似,都是希望將程序分解為小的可重用的組件,并通過(guò)組合它們來(lái)構(gòu)成共嗯那個(gè)更強(qiáng)大的可執(zhí)行程序。然而OSGI對(duì)于Eclipse開(kāi)發(fā)者最大的吸引力,還在于它的框架體系實(shí)現(xiàn)了在運(yùn)行時(shí)對(duì)模塊動(dòng)態(tài)添加和刪除功能的支持。

RCP

RCP(Rich Clent Platform)富客戶端平臺(tái),是幫助開(kāi)發(fā)者創(chuàng)建和部署富客戶端的平臺(tái)。所謂富客戶端指的是為用戶提供豐富功能體驗(yàn)的客戶端程序。通用,一個(gè)富客戶端具備以下特征: 1. 應(yīng)該是桌面程序而不能是web應(yīng)用程序,即它可以暫時(shí)脫離網(wǎng)絡(luò)運(yùn)行,還可以訪問(wèn)客戶端本地的資源如文件打印機(jī)等。 2. 界面美觀,功能豐富,具備跨平臺(tái)能力并且與操作系統(tǒng)的圖形平臺(tái)緊密結(jié)合,對(duì)用戶操作響應(yīng)要好。 3. 承擔(dān)一定程度的數(shù)據(jù)緩存以及業(yè)務(wù)邏輯計(jì)算功能,減少和服務(wù)器端的交互,減輕服務(wù)器的負(fù)載。

在Eclipse平臺(tái)的初始設(shè)計(jì)并不包含RCP的構(gòu)想,從Eclipse 2開(kāi)始,有的開(kāi)發(fā)人員開(kāi)始使用Eclipse平臺(tái)開(kāi)發(fā)別的類(lèi)型的應(yīng)用程序。到了Eclipse 3,Eclipse平臺(tái)中和IDE關(guān)系緊密的插件被剝離出去,剩下的插件集合就被作為RCP推出。這里面就包含了新的基于OSGI的運(yùn)行時(shí)框架Equinox,基于SWT/JFace的圖形模塊、Eclipse平臺(tái)的UI和Runtime模塊。

Graphic Design is the what most people think of when they think of design because it's the easiest to observe. Graphic designers pick colors, choose images, design logos, and do other very visual tasks. This type of design is similar to what most people would consider "art".If graphic design is art, then User Interface Design is science. UI designers figure out how software and users interact with each other. When you submit a form, what happens? How are users notified of errors? Does the form go to a new page, or submit while staying on the current page? Great graphic design means the software looks pretty. Great UI design means the software is easy to use. Great graphic design is Apple. Great UI design is Google (many of their products anyway - just don't mention Android or Google Docs).
RCP是構(gòu)建一個(gè)基于Eclipse平臺(tái)技術(shù)的應(yīng)用程序所需要的最小集合,但這并不意味只能使用這個(gè)最小集合中的插件。開(kāi)發(fā)者可以任意選取其他插件并將其添加到這一集合之中。

SWT

SWT(Standard Widget Toolkit)標(biāo)準(zhǔn)圖形工具箱,是Eclipse開(kāi)發(fā)人員自行創(chuàng)作出來(lái)的圖形技術(shù)。與jdk中的AWT和SWing不同。它無(wú)論在界面美觀度還是在性能上都超越AWT和Swing??缙脚_(tái)支持是Java GUI技術(shù)設(shè)計(jì)的最大難點(diǎn),AWT設(shè)計(jì)理念是不同操作系統(tǒng)中取其交集,即支持每個(gè)操作系統(tǒng)都有的控件,導(dǎo)致只能支持最常用的控件和顯示風(fēng)格,AWT早已經(jīng)沒(méi)有多少人用了。后來(lái)Swing走了另外一條路徑,它是除了標(biāo)準(zhǔn)的控件,支持手繪圖形界面,不管各種操作系統(tǒng)是否支持,這樣一來(lái),在個(gè)平臺(tái)都保持了一致,但是性能方面就不行了,目前只有Oracle的JDeveloper使用的這個(gè)技術(shù),也是使用的非常少。

SWT實(shí)際上是綜合了AWT和Swing的優(yōu)點(diǎn),盡量使用目標(biāo)平臺(tái)的控件,以達(dá)到較快的處理速度。實(shí)在是因?yàn)槟繕?biāo)平臺(tái)沒(méi)有的控件,才進(jìn)行Swing手繪控件。

JFace

JFace是一套基于SWT的工具箱,它將一些常用的界面操作包裝了起來(lái),對(duì)界面設(shè)計(jì)進(jìn)行了更高層次的抽象,使得開(kāi)發(fā)人員可以專(zhuān)注業(yè)務(wù)邏輯。在Eclipse平臺(tái)中,就廣泛使用了JFace,如“對(duì)話框”,“首選項(xiàng)設(shè)置”和“創(chuàng)建向?qū)А钡鹊?,提供了?shí)現(xiàn)框架,大大方便了開(kāi)發(fā)者。

此外,他還有兩個(gè)最吸引人的功能,操作(Action)機(jī)制和查看器(Viewer)機(jī)制。 - 操作機(jī)制是將一系列與界面操作無(wú)關(guān)的操作如對(duì)底層數(shù)據(jù)的修改,封裝成一個(gè)操作對(duì)象,以進(jìn)行復(fù)用。 - 查看器機(jī)制是指對(duì)一些復(fù)雜工作如表格、樹(shù)和列表做的包裝,使用起來(lái)更加便捷,查看器使用了MVC模式和數(shù)據(jù)綁定。

PDE

PDE(Plugin Development Environment)插件開(kāi)發(fā)環(huán)境是Eclipse的一個(gè)子項(xiàng)目,為開(kāi)發(fā)人員提供一個(gè)開(kāi)發(fā)插件的環(huán)境,提供了一整套工具來(lái)對(duì)插件進(jìn)行: - 開(kāi)發(fā) - 測(cè)試 - 調(diào)試 - 構(gòu)建 - 部署

The Plug-in Development Environment (PDE) provides tools to create, develop, test, debug, build and deploy Eclipse plug-ins, fragments, features, update sites and RCP products. PDE also provides comprehensive OSGi tooling, which makes it an ideal environment for component programming, not just Eclipse plug-in development. -- http://eclipse.org
PDE基本包括幾個(gè)模塊: - PDE UI :主要是用來(lái)窗口界面各種wizard來(lái)完成插件的配置,將POJO模型轉(zhuǎn)化為插件,和JDT集成等大部分插件開(kāi)發(fā)所需的配置和代碼。 - PDE BUILD:插件構(gòu)建并非使用maven構(gòu)建,而是更原始的Ant,只是這些構(gòu)建腳本是自動(dòng)生成的。 - PDE API Tools:

Workbench

Eclipse窗口又稱(chēng)為workbench(工作臺(tái)),它包含幾個(gè)部分: - 菜單欄 - 工具欄 - 編輯器 - 視圖 - ...

Perspective

翻譯為透視圖,指的是工作臺(tái)中一組視圖和編輯器的初始布局。將一組業(yè)務(wù)功能相關(guān)的視圖放置在同一個(gè)透視圖下,方便開(kāi)發(fā)人員專(zhuān)注工作,比如Java Perspective就是一個(gè)整體的界面適合Java開(kāi)發(fā)的透視圖。

View

視圖容器,特點(diǎn)就是只能看不能編輯。有自己的菜單和工具欄,通過(guò)菜單Windown->Open View來(lái)打開(kāi)的,可以單獨(dú)出現(xiàn),也可以和其他視圖一起出現(xiàn),通過(guò)拖拽方式改變位置。

Editor

編輯器一般是指與特定文件類(lèi)型關(guān)聯(lián)的編輯區(qū)域,如Java語(yǔ)言編輯器。

插件清單編輯器

這個(gè)文件位于RCP項(xiàng)目的根目錄下,存放著幾個(gè)重要的配置文件: - plugin.xml - MANIFEST.MF - build.properties - fragment.e4xmi/application.e4xmi

PDE提供了管理這些文件的界面:




Eclipse的版本號(hào)

首先要搞清楚Eclipse指的是一個(gè)平臺(tái), 當(dāng)我們說(shuō)Eclipse的版本比如4.16其實(shí)指的是SDK的版本,也就是說(shuō)Eclipse SDK的版本號(hào)是4.16,SDK(Software Development Kits),這是最核心的版本。

SDK的下載網(wǎng)址是Eclipse SDK download, 最新的SDK是2021-12-24發(fā)布的4.22.最早的SDK是2001-12-07發(fā)布的1.0,可見(jiàn),Eclipse SDK存活了20年了。

就如同java的JDK版本一樣,當(dāng)我們說(shuō)java 8的時(shí)候,其實(shí)就是再說(shuō)jdk的版本是1.8,同樣的,當(dāng)我們說(shuō)eclipse 4的時(shí)候,也是再說(shuō)我們的sdk是4.

Eclipse SDK是核心平臺(tái),也就是說(shuō)是一個(gè)最小合集,在這個(gè)最小合集之上,可以加裝很多擴(kuò)展的插件,也就成了各種IDE,比如SDK+JDT就成了Eclipse Java IDE,SDK + PDT就成了Eclipse PHP IDE等等,因此就不能再使用SDK的版本號(hào),而是新建了一個(gè)Eclipse IDE版本號(hào)系列,是以【年-月】的格式來(lái)定義的,比如2021-12是Eclipse IDE最新的版本號(hào),它代表了一批IDE,如下截圖:

2020-06版本的IDE

關(guān)于IDE

除了從Eclipse網(wǎng)站下載官方發(fā)布的Java IDE之外,還有其他的IDE可以下載,例如我常常會(huì)使用http://Spring.io提供的STS(Spring Tools Suite),它也是建立在Eclipse平臺(tái)之上的對(duì)IDE的擴(kuò)展,因?yàn)镾pring目前實(shí)際上已經(jīng)成為Java企業(yè)開(kāi)發(fā)的事實(shí)標(biāo)準(zhǔn),為了方便開(kāi)發(fā)人員,Spring會(huì)發(fā)布STS,這個(gè)STS就和Eclipse網(wǎng)站發(fā)布的IDE除了SDK使用同一個(gè),插件方面也很多不同。

例如筆者現(xiàn)在使用的STS的版本號(hào)是4.7.1,那么如何確認(rèn)STS使用的SDK版本呢?可以通過(guò)Help->About STS來(lái)確認(rèn),截圖如下:




使用STS,需要通過(guò)p2鏈接http://download.eclipse.org/releases/latest,通過(guò)Help>Install New Software,輸入上述網(wǎng)址,來(lái)安裝e4 tools插件。

What is p2? p2 is a provisioning platform for Eclipse-based applications. It replaces the older Update Manager as the mechanism for managing an Eclipse installation. Provisioning is the act of finding and installing new functionality, and updating or removing existing functionality; it is distinct from building.

e4核心概念和編程模式

理解e4概念非常重要的原因,是因?yàn)樵贓clipse platform亦即Eclipse SDK版本4基礎(chǔ)上的RCP應(yīng)用開(kāi)發(fā)與在Eclipse 3的RCP開(kāi)發(fā)差別很大。e3引入了OSGI,e4引入了模型設(shè)計(jì)和依賴注入。鑒于eclipse rcp開(kāi)發(fā)比較小眾,基于e4的書(shū)籍和教程較少,看來(lái)看去還是vogella網(wǎng)站的最好了。包括OSGI,這個(gè)技術(shù)也就Eclipse在用,所以之前調(diào)查過(guò)spring osgi這個(gè)項(xiàng)目,最后也是沒(méi)有再更新,說(shuō)明spring也放棄了osgi。話說(shuō)回來(lái),e4平臺(tái)與e3的差別較大,對(duì)于新開(kāi)發(fā)的插件,直接從e4的RCP開(kāi)發(fā)開(kāi)始學(xué),e3的東西可以放棄了。

更精確一點(diǎn)說(shuō),典型的e3或者叫Eclipse 3.x編程模式就是在plugin.xml中廣泛使用Extension和Extension Point來(lái)進(jìn)行聲明和實(shí)現(xiàn)新的菜單按鈕等等的話,那么e4的編程模式就是通過(guò)fragment和processor這樣的核心概念來(lái)進(jìn)行設(shè)計(jì),很少和plugin.xml打交道了。下面詳細(xì)介紹一下e4編程模式(programming model)。

首先通過(guò)完成練習(xí)3. Exercise: Create an RCP application with the wizard來(lái)對(duì)e4 RCP有一個(gè)直觀感受,通過(guò)向?qū)Ш湍0逦覀兘⒘艘粋€(gè)算是RCP的Hello World例子。

這個(gè)例子在STS上已經(jīng)進(jìn)行測(cè)試: - STS 4.7.1 - JDK 1.8 - Windows 10

運(yùn)行成功后,我們來(lái)看一下e4的編程模式,打開(kāi)工程:

Simple RCP Project Structure




fragment.e4xmi和application.e4xmi都可以作為模型文件,本質(zhì)上是一樣的,fragment.e4xmi可以引用別的fragment,但需要在plugin.xml中指定。而application.e4xmi是默認(rèn)的文件。
總結(jié)一下,在e4應(yīng)用的編程模式中,我們前面提過(guò)兩個(gè)概念:fragment和processor,在上面的工程結(jié)構(gòu)中已經(jīng)得到體現(xiàn),也就是說(shuō),我們開(kāi)發(fā)RCP的一般套路就是通過(guò)application.e4xmi/fragment.e4xmi來(lái)進(jìn)行界面的設(shè)計(jì),在src代碼里實(shí)現(xiàn)窗口以及菜單命令的實(shí)現(xiàn),然后產(chǎn)品配一配就可以完成開(kāi)發(fā)了,算是入了門(mén)。

理解了這些頂層設(shè)計(jì)之后,我們開(kāi)始下鉆到各個(gè)部分了。

fragment中的model element和model object

在e4應(yīng)用開(kāi)發(fā)中,界面被描述在fragment文件里(application.e4xmi),他們是以模型出現(xiàn)的,在設(shè)計(jì)態(tài),我們稱(chēng)之為model element,也就是模型元素,相當(dāng)于java中的類(lèi),當(dāng)他們處在運(yùn)行態(tài)或者說(shuō)運(yùn)行時(shí),這些模型元素就被實(shí)例化成對(duì)象,因此稱(chēng)之為model object。這些模型元素從上至下的結(jié)構(gòu)包括:

  1. Application,接口名是MApplication,可以通過(guò)ctrl+alt+T查看。這是應(yīng)用的root元素。
為了查看這些類(lèi)的源代碼,需要安裝反編譯插件,通過(guò)marketplace搜索【Enhanced Class Decompiler】,目前版本為3.2.2。下載安裝之后,注意在preference里關(guān)聯(lián).class without sources到decompiler并設(shè)置為默認(rèn),重新打開(kāi)class文件,就可以看到了,官方網(wǎng)站是ECD,如果是云上無(wú)法下載插件的話,可以通過(guò)安裝離線包,或者把Eclipse從云下拷貝到云上。
  1. Window,每個(gè)Application由一個(gè)或多個(gè)窗口組成,接口類(lèi)是MWindow或者M(jìn)TrimmedWindow,MTrimmedWindow可以包括工具欄。
  2. Part,這是個(gè)新概念,在e4開(kāi)發(fā)中,一個(gè)窗口被劃為多個(gè)部分(Part),一個(gè)Part是一個(gè)組件的集合,可以擁有自己的下拉菜單、彈出菜單和工具欄,用來(lái)瀏覽或修改數(shù)據(jù)。Part分為View和Editor,View是用來(lái)展示和修改一組數(shù)據(jù),例如樹(shù)形或者表格。IDE中有很多view,比如Project Explorer視圖,可以用來(lái)展示工程的文件結(jié)構(gòu),也可以在上面修改文件名,修改不需要顯示去保存。而Editor是用來(lái)修改單個(gè)數(shù)據(jù)元素的,修改后需要顯示保存,如果不保存就會(huì)在文件名左邊出現(xiàn)一個(gè)星號(hào)(*)來(lái)標(biāo)識(shí)這個(gè)Editor,成為Dirty Editor。單個(gè)Part可以直接掛在一個(gè)Widnow或者perspective。多個(gè)Part需要存放在容器里進(jìn)行排列,有兩種容器分別是Stack容器和Sash容器,區(qū)別在于排列的風(fēng)格不同。接口是MPart。
  3. Perspective,這是一個(gè)容器,這個(gè)概念我們并不陌生,比如當(dāng)我們需要debug一個(gè)java程序時(shí),IDE會(huì)提醒我們切換到debug perspective,翻譯成中文可以叫做透視圖,它的作用是從功能的角度將一些協(xié)作緊密的模型對(duì)象擺放在一起。其接口為MPerspective,必須放在MPerspectiveStack的容器里并且只能有一個(gè)對(duì)象。
  4. 其他重要模型對(duì)象:
  5. MAddon,界面不可見(jiàn)的模型對(duì)象,一般用來(lái)監(jiān)聽(tīng)特定的生命周期的事件并進(jìn)行處理。
  6. MDirtyable,如前面提到過(guò),此模型對(duì)象包含臟數(shù)據(jù)。
  7. MPartDescriptor,這個(gè)模型是一個(gè)模板,可以在此基礎(chǔ)上創(chuàng)建新的part。
  8. Snippet,這是個(gè)代碼片段,可以在運(yùn)行時(shí)通過(guò)它生成一個(gè)模型對(duì)象并附在應(yīng)用模型上。
從application.e4xmi編輯器上可以看出模型之間一些關(guān)系

上面application.e4xmi中定義的算是應(yīng)用的UI設(shè)計(jì),這里有兩點(diǎn)需要注意:

Contribute

這里需要有點(diǎn)悟性,為了區(qū)分e3和e4,在e4平臺(tái)下很多概念都進(jìn)行了重新劃分,在e3開(kāi)發(fā)的時(shí)候普遍使用plugin.xml中的extension來(lái)實(shí)現(xiàn)了窗口的擴(kuò)展點(diǎn)(extension point)來(lái)得到插件。而在e4我們不再使用extension這個(gè)概念,而是換了個(gè)概念叫做contribution。通過(guò)對(duì)application model進(jìn)行contribute得到了插件。

有兩種方式對(duì)應(yīng)用模型進(jìn)行contribute(這里我不想翻譯成貢獻(xiàn)): - 靜態(tài)方式,即創(chuàng)建自己的fragment.e4mi文件,這種就叫做model fragments - 動(dòng)態(tài)方式,即通過(guò)java代碼,這種就叫做model processors

創(chuàng)建一個(gè)標(biāo)準(zhǔn)的e4應(yīng)用的標(biāo)準(zhǔn)套路

  1. 通過(guò)向?qū)?chuàng)建插件ui工程
  2. 創(chuàng)建一個(gè)feature工程,把上面創(chuàng)建的ui插件添加
  3. 創(chuàng)建一個(gè)product工程,再把feature添加到產(chǎn)品中

依賴注入(DI)

之前第一次聽(tīng)到依賴注入是在學(xué)習(xí)Spring的時(shí)候,這應(yīng)該是spring的獨(dú)創(chuàng),后來(lái)影響到了整個(gè)java世界。e4開(kāi)發(fā)一個(gè)很重要的改變就是使用依賴注入,和Spring實(shí)現(xiàn)不太一樣,使用的注解是JSR的標(biāo)準(zhǔn)注解。如@Inject @Optional @Named。有幾點(diǎn)需要注意:




Eclipse Context 上下文

這是依賴注入的必然結(jié)果,上下文是一個(gè)容器,思路都一致,不再贅述。

這里重點(diǎn)是e4里有本地上下文(Local Context)的概念,即按照application model層級(jí)結(jié)構(gòu),在每一層都有自己的上下文,所以同樣的key在不同中得到不同的對(duì)象。層級(jí)如下

graph TD; Application --> Window1; Application --> Window2; Window1 --> Perspective; Window2 --> Part1; Perspective --> Part2 Perspective --> Part3按照這個(gè)層級(jí)關(guān)系,e4框架會(huì)自下而上的每個(gè)上下文容器里尋找對(duì)應(yīng)的對(duì)象。上下文容器里擺放了三類(lèi)對(duì)象:

特殊用法

可以自動(dòng)注入當(dāng)前活動(dòng)的part或者shell。 比如:

@Named(IServiceConstants.ACTIVE_PART)@Named(IServiceConstants.ACTIVE_SHELL)

使用注解定義行為

這篇文章有幾句非常精辟的話,尤其是第11節(jié)(Using annotations to define behavior),比較抽象,需要反復(fù)領(lǐng)悟。

If you use a framework in your application, you need to have a convention for how your application interacts with the framework. For example, if a java object is reponsible for handling a toolbar button click, the framework needs to know which method of this object needs to be call.
For this purpose, every framework defines an API, this API defines how you can interact with the framework from your code. The API also defines the interaction of application objects created or controlled by the framework. Typically, a framework use inheritance or annotations for this purpose.
這段論述引出了框架和應(yīng)用以及框架如何控制應(yīng)用的問(wèn)題,e3的時(shí)候,為了控制應(yīng)用的控件和服務(wù),使用繼承的方式,現(xiàn)代觀念一致反對(duì)繼承,會(huì)提高代碼的耦合性。

所以e4平臺(tái)的API設(shè)計(jì)是基于注解的,用于標(biāo)識(shí)某個(gè)方法在某個(gè)時(shí)間點(diǎn)被調(diào)用。這類(lèi)注解又被稱(chēng)為行為注解。

注解描述
@PostConstruct在對(duì)象被實(shí)例化后,被此注解的方法被框架調(diào)用
@PreDestroy在對(duì)象被銷(xiāo)毀之前,被此注解的方法被框架調(diào)用
@Focus在當(dāng)前part獲得焦點(diǎn)時(shí),被此注解的方法被框架調(diào)用
@Persist在保存動(dòng)作觸發(fā)時(shí),被此注解的方法被框架調(diào)用
@PersistState和@PreDestory類(lèi)似,當(dāng)在@PreDestory之前
其中,@PostConstruct和@PreDestory是jdk中定義的標(biāo)準(zhǔn)注解,后面三個(gè)是e4平臺(tái)定義的。

command 和 handler

在e4的UI中,除了窗體,還有菜單、彈出菜單、菜單欄按鈕等控件,e4將控件、命令和實(shí)現(xiàn)分開(kāi),控件定義UI,command定義了該命令的屬性以供復(fù)用,handler則定義了該命令被執(zhí)行的內(nèi)容,在application.e4xmi中有實(shí)踐。一般來(lái)說(shuō)設(shè)計(jì)時(shí),將command和handler實(shí)現(xiàn)好,再掛載到具體的控件上。

關(guān)于handler的行為注解主要有兩個(gè): - @Execute,是用來(lái)標(biāo)識(shí)該方法會(huì)在command從界面上被按下時(shí)被執(zhí)行 - @CanExecute,被此注解的方法返回true或false,是用來(lái)輔助@Execute的,也就是說(shuō)在執(zhí)行@Execute注解的方法之前,會(huì)測(cè)試一下是否可以執(zhí)行。

最后,值得提醒的是可以直接使用e4預(yù)先定義好的command,這樣就不用自己實(shí)現(xiàn)其handler了。

以下是其列表:


本文完。

關(guān)鍵詞:

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉