jax 08 - agile rcp

42
Agile RCP Presenter First using Spring Dynamic Modules Heiko Seeberger | metafinanz

Upload: heiko-seeberger

Post on 30-Jun-2015

826 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: JAX 08 - Agile RCP

Agile RCPPresenter First using Spring Dynamic Modules

Heiko Seeberger | metafinanz

Page 2: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz2

123

Concepts

Application to RCP

Agile RCP framework

Page 3: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz3

What is agile?

• Develop exactly what is required.• Test-driven development.• …

Page 4: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz4

How can we be agile?

We need:• Agile process driving the design.• Architecture allowing for unit-testing.• …

Page 5: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz5

Can UI development be agile?“User interfaces are hard to unit-test”:• Tangling of presentation and logic.• Dependency on concrete UI

technologies.

Page 6: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz6

UI logic

Example: Unit-testing UIs

Verify input Invoke addition

Page 7: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz7

Test Cases

How to implement these Test Cases?• Non-digits => Log error “Illegal format

…”.• 123 + 999 => 1122.

Example

Page 8: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz8

Vanilla approach

Put “everything” into one Composite:• Text, label and button controls.• Handling button clicks:

– Verify input, possibly display error.– Invoke “business logic”.– Show result.

Example

Page 9: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz9

Vanilla tastes, but …

• Quick win for the implementation.• Disastrous for testing.

– Why?– Let me show you (demo) …

Example

Page 10: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz10

Any better ideas?

Page 11: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz11

Use Model-View-Presenter

Similar to MVC, but:• Controllers for

widgets, presenters for views.

• Widgets hand off user gestures to presenter.

View

Presenter

Model

Page 12: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz12

Passive View

• Does not listen to model updates.

• All UI logic in presenter.

passive

UI logic

View

Presenter

Model

Testing UI logic == Presenter testing

Page 13: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz13

Interface abstractions

• Interfaces for model and view.

• Mock model and view to test presenters. passive

UI logic

IView

Presenter

IModel

PresenterTest

MockView MockModel

Presenter testing == EasyTesting UI logic == Easy

Page 14: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz14

Presenter First architecture• MVP.• Passive View.• Interface

abstractions for model and view. passive

UI logic

IView

Presenter

IModel

Page 15: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz15

Presenter First process

IView

Presenter

IModel

The user can query for books by entering the title in the query form …

User Story-onQuery()…

+getName()…

+getBooks()…

Requirements drive the design.

Page 16: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz16

Presenter First (PF) answers:• How can we be agile?• Can UI development be agile?

– Delivers an agile process driving the design.

– Based on an Architecture enabling unit-testing.

– Untangles presentation and logic.– Abstracts from concrete UI technologies.

Page 17: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz17

Presenter First approach

IView

Presenter

IModel

The user can enter two addends. Clicking “=“ will add and show their sum.

User Story

-handleAdd()…

+getAddend01()+getAddend02()+setSum()

+add()…

Example

+getAddend01()+getAddend02()+setSum()+registerAddHandler()

Page 18: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz18

Presenter First approach

Example

Demo …

Page 19: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz19

Test the presenter

Example

Page 20: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz20

Full test coverage for UI logic

Example

Page 21: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz21

123

Concepts

Application to RCP

Agile RCP framework

Page 22: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz22

How to create the MVP triads?

IView

Presenter

IModel

MockView MockModelView Model

Page 23: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz23

Application context

Use Spring!

Presenter

View Model

Page 24: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz24

Bundle

Application context

Spring Dynamic Modules

Integration of OSGi/RCP and Spring:• Active bundle Spring application context.

Bean

BeanBean

Page 25: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz25

Example

Application context

ContactsPresenter

ContactsView ContactsModel

Page 26: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz26

Bundle

Application context

Sharing beans across bundles• Exporting beans as OSGi services.• Importing OSGi services as bean references.

Bean

BeanBean

Bundle

Application context

Bean

Bean

Page 27: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz27

Im-/exporting services

• Importing an OSGi service:

• Exporting a bean as OSGi service:<service ref="personRepository" auto-export="interfaces"></service>

<reference id="personRepository" interface="org.agilercp.demo.contacts.IPersonRepository"></reference>

Page 28: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz28

org.agilercp.demo.contacts.ui

Application context

Example

ContactsModel

org.agilercp.demo.contacts

Application context

PersonRepository

Page 29: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz29

How to create ViewParts?

Workbench

views xPt

ViewPart

• ViewParts are created by the workbench.• How can we use the Spring created ones?

Page 30: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz30

The workbench is flexible!

Workbench

ViewPartFactory

views xPt

Application context

Presenter

View Model

IExecutable-ExtensionFactory

IExecutable-Extension

getBean viewId(viewId)

Page 31: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz31

Example

Page 32: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz32

Application context

Dialog ViewPart

How to create Dialogs?

Presenter

View Model

Presenter

View Model

dialog

• Let Spring create the Dialog.• Inject it into opening MVP triad.

Page 33: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz33

Example

Page 34: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz34

123

Concepts

Application to RCP

Agile RCP framework

Page 35: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz35

Agile RCP

• Presenter First framework for RCP.• Emerged from a real-world project.• Open Source: http://

sourceforge.net/projects/agilercp.• Website: http://agilercp.metafinanz.de.

Page 36: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz36

Challenge

• Spring instantiates views,• but controls created later.

How can a presenter initialize its view before it is shown?

Page 37: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz37

Agile RCP supports MVP life cycle

Page 38: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz38

Showing views …

M and V are instantiated.

P is instantiated and M and V are

injected.

P initializes V.

P registers itself as IViewListener to V.

V is created.

V is shown.

Page 39: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz39

Agile RCP delivers a view factory• Has access to Spring application

context.• Gets workbench parts by view/editor id.

Page 40: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz40

Agile RCP delivers a lot more• Base classes for ViewParts.• Base classes for Dialogs.• Utility classes.• …• And a lot more is planned!

Page 41: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz41

Agile RCP approach

Example

Demo:New requirement: Initialize view

with“123 + 999 = 1122”

Page 42: JAX 08 - Agile RCP

2008-04-22 Heiko Seeberger | metafinanz42

Thank you!

• Website: http://agilercp.metafinanz.de• Agile RCP at sourceforge.net:

http://sourceforge.net/projects/agilercp• Contact me:

[email protected]