Andromda and Roo, 1-2-1 Evaluation
Rapid Application Development, some of us know it as RAD, is a methodology to develop applications quickly, efficiently and based on best practices of programming. You sit in front of computer you type in some commands or draw some figures then you let the RAD framework/tool process it and o la-la. You get an end to end application running like magic. Based on your knowledge of RAD framework, you are using, you can get an application up and running within 5 to 10 tiny minutes, same number of minutes, give or take one or two, you spend on making tea, given you the benefit that water is hot.
Andromda and Spring Roo are used for Java based rapid web application development. Both have their pros and cons. Interesting thing about them is, both are very much alike. Both uses the Spring framework, MVC and REST architecture style, same application architecture but there are some things that are specific to each. So they are different and alike at the same time like tea bags of different brands. Let's see in detail what makes them different.
Andromda is a framework as compared to Spring Roo which is a tool. In Andromda you just need to include jar files or dependencies in case of maven in your project and rest is taken care by Andromda. On the other hand Roo needs you to set things up for its working, then run it like any other piece of program.
Andromda uses UML diagrams to build Java classes and their relationship in a Java Project. What you do is open up some UML tool like 'Magic Draw' by 'No Magic, Inc' and then following the rules of UML you draw class diagrams, export those diagrams in form of XML files and then Andromda uses those XML files to generate Java code. In case of Spring Roo you have to do all this stuff from command line. You write in some commands and depending on the command Spring Roo adds that functionality in your Java class. Functionality can be a new attribute, a new method or a relation of entity to another entity.
Andromda gives you a basic skeleton of project based on information you have provided in UML diagrams and does not fill in the definition of methods automatically. It can give you a full working hibernate tier to interact with your entities and databases but it won’t provide you implementation of any of the service methods. Roo, trying to be smart, provides you the basic CRUD functionality for all the entities out of the box. You do not have to worry about basic functions. So all the functions in hibernate tier are already implemented unless you want to add some new functions. And it can provide you implementation of many basic methods.
With Andromda you do not have any control over application Architecture, you work on a fixed application architecture that have fixed amount of layers. Roo lets you decide fate of your application on architectural level. You can skip a layer or you can add a layer.
When there is Andromda in application you have to be careful what file you can modify and what you can't or being more literal you should not. Andromda keeps implementation files (*Impl.*) separate from other files and these are the files that are generated only once and all your custom code goes here. All other files that are generated by Andromda are destroyed and generated with each build/compilation so your changes in those files will not lead you anywhere. Roo have no such intentions, it simply allows you to change in any file you want and won't mind your actions. So you don't have to do face-palm after certain compiles.
Input validation is a one big thing to consider when you are designing an application. Andromda provides you input validation out of the box. You don't have to worry about doing it manually. But in case of Spring Roo you have to write all the validation statements.
Andromda lets you have a good grip on how the front end will act. You can define use cases. You can tell Andromda to put what things on what page. Keeping it short Andromda front end is highly customizable. You can make it look like as you wish. With Roo it becomes a little bit tricky. Roo gives you scaffolded controllers and pages out of the box like a charm but bending those view can be a little bit tricky and time consuming and sometime it can be real pain.
These are few of many points where Andromda and Roo are not so much alike. As you have seen each one has its own benefits and each one has its own cons and it’s hard to decide what to select if you are going for RAD. Selecting Andromda forces you to learn about UML unless you know already about it and on the other hand Spring Roo can be difficult if you do not like command line.
It would be better if we can break down question to a flexible one. When to use what?
If you are going to develop an application that is only for intra organization use, you do not need to expose your web services using REST or you do not need a flexible architecture for you application then Andromda seems to be made for you!
On the other hand if you want decoupled back-end, flexible architecture different support ad-ons, Roo gives you all this.