After my first successfully completed Vaadin project I knew: Vaadin is a very good technology but the provided possibilities to create event driven applications were too limited. Coming from Adobe Flex using the Cairngorm project I knew there should be more possibilities for dispatching events, register listeners and so on.
The next project at work was a complex Vaadin application and we decided to create the first version of a Model View Presenter (MVP) framwork. We planed to use the Spring Framework, so it was logical to combine our MPV framework with Spring.
In the project we learned a lot about structuring our Vaadin UI code and developed some best pratices. During the project we recognized: our MVP idea is quite good, it works well and it should be further improved.
So I decided to improve the Model View Presenter framework in my leisure time and the result is the spring-mvp Vaadini addon which is publicly available in the Vaadin addon directory.
The basic ideas of spring-mvp are simple:
- dispatch and listen for events to have loosly coupled UI components
- separate the front-end into View, Presenter and UIService (models were already there).
The demonstration application for spring-mvp is a shopping-cart application. Each shopping-cart can have several articles in it. The special feature of the demonstration application is all application instances (which means each application in separate browser) gets informed when a shopping-cart or an articles was edited and the changes are shown immediately in all browsers. Try it out!
The detailed documentation describes the functionality of spring-mvp and how to use it. The source code for the complete spring-mvp Vaadin addon is available in a Git repository.
Exactly what I was looking for as I come from flex/cairngorm world. Have you tried it with vaadin 7? Will it not work?
Hi Harry,
Vaadin 7.1 has a new push mechanism which is currently not supported by spring-mvp. I’ve not had the time yet to update spring-mvp so it supports Vaadin 7.1.
But that definately is an interesting task 😉
Regards,
Christoph