What is the Wurbelizer?The Wurbelizer is a generic and lightweight code generator for agile development projects. It is easy to integrate, easy to learn, slim and yet flexible and powerful. The Wurbelizer is written in Java and available as Open Source according to the LGPL.
It isn't simple because the usefulness of the generated code depends on the completeness of the model. However, experience shows that a complete model is hard to achieve and a rather optimistic assumption, especially during early stages of a project. Unfortunately, this does not fit well with agile development methods, because they rely on a roundtrip engineering with short development cycles beginning as soon as possible, even if the model is not fully known yet.
The Wurbelizer simplifies generative programming in agile projects significantly by eliminating the need for a complete model. Instead of generating source files as a whole, it focuses on aspects which are represented by independent generators anchored within the source files and communicating with the model on their own. This approach leads to an inversion of the perspective, in which no longer the model but the code itself drives the code generation by picking only those parts from the model that are sufficient to describe the aspects completely. The traditional monolithic and waterfall-like transformation phase is replaced by many small and generic mini-generators that keep the code in sync with the model. The more elaborate the model gets and the more aspects can be described, the more working and therefore testable code can be generated and all this will fall into place as the project emerges.
What the Wurbelizer is notThe Wurbelizer is not a template engine, although it can be used as such.
It is not a preprocessor, although it can manipulate source files the same way a preprocessor can do.
It is not an MDD tool, although it generates code from models.
It is not an AOP framework, although it weaves the implementation of aspects into sources.
It is not a dependency injection framework, although it can be used to inject dependencies.