nyílt fejlesztőrendszerek plugin fejlesztés – tervezési minták

74
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

Upload: tryna

Post on 12-Jan-2016

32 views

Category:

Documents


0 download

DESCRIPTION

Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták. Eclipse platform. Sok fejlesztő Hatalmas API Sok komponens Rengeteg extension point Rengeteg funkció Hogyan lehet kézben tartani a fejlesztést? Szabályok! Tervezési minták!. Patternek. Szoftver újrafelhasználás - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Nyílt FejlesztőrendszerekPlugin fejlesztés – tervezési minták

Page 2: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

2Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Eclipse platform

Sok fejlesztőHatalmas APISok komponensRengeteg extension pointRengeteg funkcióHogyan lehet kézben tartani a fejlesztést?

− Szabályok!− Tervezési minták!

Page 3: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

3Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Patternek

Szoftver újrafelhasználás− Fejlesztési célok

● Gyorsaság● Minőség● Elfogadható ár

− Újrafelhasználhatóság céljai és lehetőségei● Gyorsítja a fejlesztést● Biztonságosabb megoldásokat kínál● Megkönnyíti a fejlesztők dolgát

Page 4: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

4Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Újrafelhasználás - alapkoncepció

Page 5: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

5Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Újrafelhasználás - evolúció

0. „mindent a kályhától”1. Copy-paste2. Függvény könyvtárak3. Objektumok4. Osztály könyvtárak (class libraries)5. Tervezési minták, minta nyelvek6. Komponens technológiák7. Keretrendszerek (frameworks), vállalati

sablonok

Page 6: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

6Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Minták - alapfogalom

Általános minták:− Olyan, sokak által ismert formátumban

dokumentált megoldásváz, amelynek alkalmazhatósága könnyen eldönthető egy adott probléma esetén, a végleges megoldás útmutató segítségével könnyen létrehozható.

SW minták:− Egymással kapcsolatban álló osztályok és

objektumok, amelyek együtt egy adott objektum-orientált tervezési feladat vagy probléma megoldását szolgálják.

Page 7: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

7Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Tervezési minta - adatok

1. Azonosítás1. Név2. Kategorizálás3. Kulcsszavak4. Ismert alkalmazások5. Kapcsolódó minták

2. Probléma1. Motiváció2. Cél

3. Megoldás1. Struktúra2. Résztvevők3. Együttműködésük4. Implementáció5. Kód minták

4. Következmények1. Előnyök2. Hátrányok3. Alkalmazhatóság

Page 8: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

8Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Tervezési minta megadás -példa

Page 9: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

9Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Tervezési minta felhasználás

Implementálás fázisai:− Keresés

● Név● Felhasználási terület● Kulcsszavak

− Kiválasztás● Előnyök, hátrányok● Alkalmazhatóság

− Készítés – jól bevált ötletek− Felhasználás - implementálás

Page 10: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

10Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Tervezési minták leírása

Hagyományos− Szövegszerkesztő + rajzolóprogram− Szabad kéz a kötelező és opcionális elemek

terénTörekvések

− Egységes formátum, tool támogatás, katalogizálás és visszakereshetőség segítése

Nyelvek− PCML (Pattern & Component Markup Lang.)− RAS (Reusable Asset Specification)

Page 11: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

11Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Alapvető tervezési minták

Page 12: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

12Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Factory method

Egy objektum létrehozásakor egy interfészt definiálunk, de a leszármazott osztályok eldönthetik, hogy milyen oszályt példányosítanak valójában

Page 13: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

13Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Factory method

Cél:− Komplex objektum létrehozása− Egy specifikus implementációból− Azonos konstruktor különböző

implementációkhoz

Megoldott esetek:− Ha egy t kell példányosítania− Ha egy osztály a gyerekeire akarja hagyni

a példányosítandó osztály meghatározását

Page 14: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

14Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Factory method

Megoldás: elkerülhető a specifikus osztályok bedrótozása a kódba

Page 15: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

15Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Tervezési minták

Még sok, jól bevált van− Általános minták− Vállalati minták− …

Ajánlott irodalom:− Gamma et. Al.: Design Patterns

Page 16: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

16Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Tervezési minták - Eclipse

A legfontosabb részek mintákat kínálnakÉs mintákat használnakA kiterjesztések megvalósításához

Page 17: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

17Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Alapprobléma− Az Eclipse kiterjeszthető platform

● Új funkciók, új komponensek jönnek létre

− Az új elemek feldolgozásához meg kellene változtatni az API-t?

● Nem lenne elég stabil az interfész

− A már meglevő részek működését is befolyásolni kell – hogyan?

● Az alap Java nem segít

Page 18: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

18Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Példa− Az Eclipse elválasztja a megjelenítést a

működéstől− Pl. IFile, IFolder, IProject – a fájlrendszer

elemeinek absztrakciói – nincs megjelenítés− Lehetne: IUIFile, …

● Nem jó, mert minden új elemhez új UI interfész is kellene (overhead)

− Hogyan jelenítsük meg az elemeket?

Page 19: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

19Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Megoldás - IPropertySource− Egy interfész, melyen keresztül lekérdezhetők

az elem megjelenítés-specifikus tulajdonságai

− Hogyan implementáljuk?● Közvetlenül… -> nem jó!

Page 20: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

20Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Közvetlen implementáció− Túl sok örökölt interfészhez vezethet, nem jó− Az interfész átvételével változik az API, ami

nem jó− Ha pl. az IFile tudna a Properties viewról,

akkor beépítettünk egy nem kívánatos GUI – Core linket…

Page 21: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

21Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Konklúzió− Szükség van egy megoldásra, mely lehetővé

teszi:● Egy interfész hozzáadását egy típushoz, anélkül

hogy a típust belőle örököltetnénk● Új viselkedést adjunk meglevő típusokhoz (pl.

IFile)

Megoldás: Extension Object pattern

Page 22: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

22Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Extension Object pattern− Cél: különböző interfészek támogatása

anélkül, hogy a típusunknak örökölnie kellene őket

− A kliens egy típuskód alapján kérheti le a megfelelő interfészt

− Dinamikusan nőhet az interfészek száma− Futásidejű kötés lehetséges az extension-

öknél

Page 23: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

23Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Extension Object pattern− Kérdések

● Objektum vagy osztály szintű extension kezelés -> az Eclipse osztályt szintűt definiál

Új viselkedés megadható, de új tulajdonságok nem!

● Hogy adjuk meg a lehetséges extension-öket? -> 2 megoldás

A kiterjeszthető osztály maga adja meg (programozott) Külső kiterjesztés esetén a Platform osztály segíségével

regisztrálunk egy Adapter Factory-t az osztályhoz.

Page 24: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

24Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Példa – bedrótozott kiterjesztés

Page 25: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

25Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Példa – bedrótozott kiterjesztésInterfészt ad meg a kliens

Page 26: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

26Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Példa – bedrótozott kiterjesztésAz implementáló osztályt példányosítjuk

Page 27: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

27Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Példa – utólagos kiegészítés

Az utólag elkészült extension osztály

Page 28: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

28Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Példa – utólagos kiegészítés

Az adapter factory, mely tartalmaz egy listát az extension-ökről

Page 29: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

29Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Példa – utólagos kiegészítés

Az adapter factory getAdapter metódusa. Az adott objektumhoz és adapterhez tartozó extension példányt kell visszaadni.

Page 30: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

30Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Példa – utólagos kiegészítés

Regisztrálni kell az AdapterFactory-t. Ezt a plugin start metódusában vagy statikus inicializáló blokkjában érdemes megtenni.

Page 31: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

31Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Példa – utólagos kiegészítés – összefoglaló modell

Page 32: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

32Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Core runtime - IAdaptable

Elemek− IAdaptable – a kiegészítendő osztálynak

implementálni kell

− AdapterFactory – utólagos bővétményeket tárol és példányosít

Page 33: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

33Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrások

Erőforrások− Az Eclipse erősen fájlrendszer alapú

● Nincs köztes repository● A fájlt vagy közvetlenül (kívülről) vagy az Eclipse-

ből módosíthatjuk

− Erőforrások● Létrejönnek/módosulnak/törlődnek● Nem akarjuk az állapotot több helyen tárolni

Állapotmentes referencia kell Eclipse: csak Handle-t kap a kliens

Page 34: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

34Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrások

Handle− Két minta összekötése: Proxy és Bridge− Proxy: helyettes létrehozása egy objektum

számára, hogy kontrolláljuk a hozzáférést● Hozzáférés kezelés -> érvénytelen állapot

kialakulásának elkerülése

− Bridge: leválasztja az interfészt és az implementációt, hogy függetlenül módosulhassanak● Az interfész és implementáció erős elválasztása

Page 35: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

35Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrások

Alkalmazás a fájlrendszerre:− Egy handle, ami kulcs a fájlhoz− Egy info objektum, mely a fájl állapotát

tárolja. Csak egy info implementáció van minden handle-hez.

− Handle: IFile, IFolder, IProject, IWorkspaceRoot● Nem implementálandóak!

Page 36: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

36Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrások

Példa: IFile

Csak az elérési utat és a workspace-t ismeri

Page 37: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

37Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrások

Handle− Érték típusok, az egyenlőséget qz equals()

metódussal vizsgáljuk● Hash-elhetőek● Több handle mutathat ugyanarra az erőforrásra

− Definiálhatják az erőforrás viselkedését, de az állapotát nem tárolhatják

− Egy handle mutathat nem létező erőforrásra− Néhány művelet csak a handle-ben levő

információkra alapoz, ezek nem létező erőforrás esetén is sikeresek

Page 38: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

38Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrások

Handle− Ha egy műveletnek szüksége van az

erőforrásra, CoreException-t dob, ha az nem létezik

− Létezés tesztelése: exists()− A handle egy szülő handle-ből keletkezik

− A handle használható az erőforrás létrehozására is

Page 39: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

39Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrások

Handle− Mivel a handle állapot nélküli, biztosan nem

tárol érvénytelen állapotot a kliensben.

Page 40: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

40Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrások

ResourceInfo− Az elemek állapotát tárolja− Leszármazott osztályok (pl. ProjectInfo) a

speciális állapot tárolására− Fa struktúrában tárolódik a teljes workspace

információja a memóriában− ->”element tree”− Az info visszaadása a fa bejárásával történik

a handle-ben levő path segítségével● Lemezművelet nélkül megtalálhatjuk a keresett

elemet

Page 41: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

41Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Workspace – composite pattern

Az erőforrás fa a composite mintát követi− A composite minta lényege: Fastruktúrába

szervezni az elemeket, a köztük levő rész/egész viszony felhasználásával.

A fa gyökere: IWorkspaceRoot− ResourcePlugin.getWorkspace()

Page 42: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

42Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Workspace – composite pattern

Az IResource közös ősA getParent() művelet csak a handle-kre alapozva teszi lehetővé a navigációt

Page 43: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

43Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Workspace – composite pattern

Közös ős az összetett objektumok számáraA gyerekek bejárhatóak a members() hívással

De van jobb megoldás…

Page 44: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

44Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrás bejárás - Visitor

A kódolás elkerülésére alkalmazzuk Visitor: Egy műveletet valósít meg,

melyet egy objektum struktúrán akarunk megvalósítani.

A fa bejárást nem kell megvalósítani, csak egyszer

Page 45: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

45Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrás bejárás - Visitor

Struktúra

Az accept() metódus valósítja meg a bejárást, és visszahívja a visitor-t minden elemre

Ha a visit() true-val tér vissza, akkor az elem gyerekeit is be kell járni

Page 46: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

46Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrásváltozások követése - Observer

Az erőforrások változhatnak− Az Eclipse-en belüli változtatások miatt− A fájlrendszerhez való újraszinkronizálás

miatt

Az állapotváltozásokat követni kell− A klienseknek a hatékony állapot-frissítések

miatt szükségük lehet rá− A Workspace-ben kel regisztrálni

Page 47: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

47Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrásváltozások követése - Observer

Tárolja a Listenereket

Page 48: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

48Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrásváltozások követése - Observer

A listener megkapja az értesítést

Page 49: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

49Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrásváltozások követése - Observer

Kétféle módosítási minta− Push – a listener részletes információkat

kap a változásokról− Pull – a listenernek kell lekérdezni az új

állapotot− Eclipse: ResourceDelta

● Az erőforrás-fa állapot-változását írja le● Önmaga is fa

Page 50: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

50Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrásváltozások követése - Observer

A resourceDelta az egyszeres és többszörös változásokat ugyanazzal a struktúrával írja le

Egyszerűen be lehet járni a delta tree-t Mivel az erőforrások csak handle-k, törölt elemekre

is hivatkozhatnak

Page 51: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

51Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Batch változtatások

Minden eseményvezérelt rendszerben veszélyes a túl sok esemény érkezése

Lehetőség van atomi kompozit akciók létrehozására

− IWorkspaceRunnable− Atomi futtatás− Csak egy értesítés keletkezik, a futás végén

Page 52: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

52Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Batch változtatások - példa

Az „execute around method” minta alapján A run() metódus az execute-around metódus

Page 53: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

53Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrások->Java elemek - Adapter

Az erőforrás-struktúra− Fájlok és mappák

A Java-centrikus nézet− A Java modell struktúrája – osztályok,

csomagok, …

A Java nézetben más API-val akar dolgozni a felhasználó

− Tipikus eset az adapter mintának

Page 54: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

54Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrások->Java elemek - Adapter

IJavaElement.getCorrespondingResource() – a mögöttes erőforrás – nem mindig van!− Vannak Java elemek, melyek a workspace-en kívül vannak,

nincs erőforrás megfelelőjük− Java elemek, melyek metódusokat reprezentálnak

Page 55: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

55Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Erőforrások->Java elemek - Adapter

Az IJavaElement lehetővé teszi a mögöttes erőforrások elérését

Szükség lehet a másik irányra is!− Facade: JavaCore – factory metódusok

erőforrásokból Java elem létrehozására -> ezek csak handle-k

Page 56: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

56Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Java elemek – (Virtuális) proxy

Hasonló struktúra, mint az erőforrások esetén

Page 57: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

57Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

A Java modell bejárása

Nincs olyan Visitor megoldás, mint az erőforrásoknál

− A Java fa lusta módszerrel épül fel− Ezért egy teljes bejárás költséges lenne

● A fordítási egységeket értelmezni kell…

− Inkább egyedi keresést alkalmazzunk

Page 58: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

58Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

A Java modell – változás figyelés

Nagyon hasonló az erőforrásoknál alkalmazotthoz

Page 59: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

59Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

A Java modell – változás figyelés

Az erőforrás deltákkal ellentétben nem mindig a gyökérből indul

A delta csak az eseménykezelés alatt érvényes (erőforrás-felszabadítás)

ExecuteAround: JavaCore.run()

Page 60: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

60Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

A Java modell – változás figyelés

A típushierarchia nem része a fának Ezért külön változás-figyelés van hozzá

Page 61: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

61Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Eredmények gyűjtése - Builder

A Java Core több olyan elemet tartalmaz, melyek működése után egy eredménylista keletkezik

− A search egy találati listát generál− A content assist a lehetséges folytatásokat

adja vissza− A Java fordító hibaüzeneteket generál

A lista generálásának és megjelenítésének elválasztását meg kell oldani.

Page 62: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

62Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Eredmények gyűjtése - Builder

Builder: Válasszuk el egy komplex objektum létrehozását és ábrázolását, hogy ugyanaz a konstruktor más-más reprezentációhoz vezethessen.

Hasonló a Factory-hoz. A Builder komponensek neve Requestor-

ra vagy Collector-ra végződik (Eclipse konvenció)

Page 63: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

63Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Eredmények gyűjtése – Builder Példa: Search

A SearchEngine végzi a keresést, és értesíti az IJavaSearchResultCollector-t

Page 64: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

64Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Eredmények gyűjtése – Builder Példa: Search

Gyűjti a találatokat. Az aboutToStart() a kezdést jelzi, az accept az egyes találatokat.

Page 65: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

65Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Eredmények gyűjtése – Builder Példa: Content Assist

Lehetséges folytatásokat keres

Page 66: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

66Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Eredmények gyűjtése – Builder Példa: Content Assist

Az eredményeket típus szerint jelenti

Page 67: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

67Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

UI Workbench – Lusta betöltés

A workbench számos extension point-ot definiál

Fontos a lazy load tulajdonság megteremtése, hogy ne kelljen minden extension-t betölteni

Példa: akciók Csak a deklaráció töltődik be (plugin.xml)

− Vrtuális proxy minta

Page 68: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

68Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Eredmények gyűjtése – Builder Példa: Content Assist

Maga az Action a plugin.xml információi alapján készül. A run() kivételével mindent tud

Page 69: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

69Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Eredmények gyűjtése – Builder Példa: Content Assist

Az implementáció csak a run() hívásakor töltődik be

Page 70: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

70Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

UI Workbench – Állapotmegőrzés

User continuity rule: „Preserve the user interface state across sessions.”

Az állapot-tárolással kapcsolatos követelmények

− Robosztus, könnyen bővíthető− Komplex struktúrákat is támogatnia kell− Tetszőleges objektumot el kell tudni menteni

és visszatölteni

Page 71: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

71Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

UI Workbench – Állapotmegőrzés

Memento: Az integritás megsértése nélkül tegyük lehetővé az objektum állapotának kimentését, amiből később az állapot visszaállítható.

Az Eclipse XML-alapú formátumot használ

Page 72: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

72Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

UI Workbench – Editor és View visszaállítás

Sok editor és view lehet aktív De csak kevés látszik egyszerre Visszaállításkor nem kell mindet betölteni

− Mert ez sok plugin aktiválásához vezetne

Proxy-kat kell használni Kooperációt igényel: Ha le akarjuk kérni

az editorok listáját, csak a proxy-kat kérjük le.

Page 73: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

73Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

UI Workbench – Editor és View visszaállítás

Page 74: Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

74Budapest University of Technology and Economics

Fault-tolerant Systems Research Group

Példa: ISafeRunnable

for (Iterator all=getListeners().iterator();all.hasNext())

{

IMyExstension ext = (IMyExtension)all.next();

ISafeRunnable runnable = new ISAfeRunnable() {

public void handleException(Throwable exception){

all.remove();

}

public void run() throws Exception {

ext.execute(); //hívom az extensiont

}

};

Platform.run(runnable);

}

Végigmegyünk az extension-ökön