GUI developement is simple in the concept. Basically, it's all about presenting objects to the end-user, and allowing to interact with them. You typically show a product, show a cart, allow to add products to the cart etc. In the end, if you think about it, the GUI can be seen as a set of views of, and interactions with objects. Views present the objects, and interactions allow to trigger some processes (collaborations between objects) in the Domain Model.
Get Into Troubles : GUI developement is often chaotic...
In practise, it's very often a repetitive and boring task. You usually feel like you reinvent wheels all the time just to get things displayed on the screen... annoying, huh ? OK, you have frameworks and tools that help a lot now, but there's almost no really consistent methodology behind them ! Take RCPs for example : they offer a lot of attractive and useful features to build interfaces, but no-one really tells you how to use these tools in order to build an application. You rarely see the concept of views on objects in such tools, they're ingredients, but you still do the cooking yourself ! Not to mention so called "web frameworks" which mostly have their "proprietary" vision and tools, and all require you to learn a new language and concepts just to get started...
Get Organized : Domain Driven Developement
Let's climb a bit in the abstraction levels, and we find much more interesting stuff, like Naked Objects and other frameworks gravitating around the Naked Objects Pattern (JMatter, RomaFramework, Able, etc.).
Basically, the idea is that objects should be self-descriptive to such an extent that GUIs can be completely generated for them ! You feed the system with some Domain Objects, and you've got the GUI for free ! Doesn't thet sound like a dream ??? It's reality !
Get Profiled : The Woko Way !
Woko inspires from this concept too. It's an Object-Oriented Wiki : it allows to put your objects on the web without the hassle of writing UI code. It heavily relies on facets in order to allow profilized browsing of persistent POJOs without effort.
You simply develop your Domain Model using annotations and POJOs, and Woko displays them out-of-the-box in web pages ! Kinda Wiki-style CRUD : you can browse, create, edit and associate objects together directly in an intuitive and easy approach... You can also search in your objects "a la Google" directly, and have RSS feeds for them !!!
Woko is all about presenting some facets of your objects to end-users based on their profile. This is its major difference with other Domain-Driven frameworks. In Woko, almost everything is facet-driven, which means that you can customize the default rendering of some Domain Objects for some particular user profiles ! And that's what all web application developement is about today : you want information to be shared in a personalized fashion !
Last but not least, you don't "scaffold" or generate code in Woko : you extend it ! You don't have any round-tripping issues, you never overwrite the wrong file... you simply add what you want by extending the appropriate facets for the appropriate Domain Object and User Profile.
Woko is more than an framework, it's a full-stack application skeleton, which bundles a bunch of technologies and frameworks together :
- Hibernate + Annotations : Persistence and Domain Model ;
- Stripes + Stripernate : Web MVC, FORMs & validation, Hibernate integration ;
- JFacets : User profiling ;
- Acegi : User authentication, long-term sessions, ACLs ;
- Compass : Object-Oriented search engine.
Developing in Woko is simple : you write Domain Objects, and facetize them for your user's roles !
Get Involved !
Woko is fun : the way you get your objects on the screen in a few seconds is still kinda magic :-)
Woko is disruptive : it completely breaks the model and proposes a new way of building multi-profile, object-and-profile-driven webapps.
Woko is easy : it leverages complex technologies by allowing to use them in a simple way, without even noticing it.
For the moment, it's only a prototype, but it's really promising. We're open to new ideas and contributions, so feel free to speak up !
Try it, and tell us what you think !