How I can know what is the best web framework for my project?
Today almost all development projects have a web interface as part of the product. This is not a challenge if we have a team which has worked with such projects. But what happens if the computer does not have experience in web application development?
For example, comes from the enterprise world, with years of experience in system of medium and large clients made with frameworks such as Swing GUIs.
At first probably underestimate the web world is thinking that everything is child's play that anyone can do that by hiring a web designer our problems will be solved. But obviously you're wrong and as soon as he began to study the basics are a number of concepts such as not less session handling, AJAX, CSS, XSS, SQL-Inyection one must understand before you can make any system.
Once we finished studying these concepts and we turn to feel safe to start is only then that our problem begins. At that point is when the big question arises What web framework (FW) is the one I use for my projects?
A couple of years ago this would have been a problem, the answer probably would have been if we are working in Java, using struts. But today that changed because only for Java on page http://java-source.net/open-source/web-frameworks can find more than 40 frameworks, within which the one I use is not. Not to mention if we consider FW of different programming languages such as Ruby, Python, PHP and. Net. So how can we answer such a question today?
Then I will define what IMHO are the factors that I have used to answer this question that can be helpful to others facing a similar situation. We assume that we have a development team with expertise in a particular language which we convert to web application development. Some of the points raised do not make sense for example for an independent developer or if you are putting together a team from scratch. When working with a team already formed to consider factors are not directly dependent on technology that can determine the best FW in the world, not the best choice, which makes the solution of the neighbor is not always the right solution for one. Therefore we must be careful with our peers when your best intentions we recommend "FW" and they probably do not know the context in which you use. Finally we should be realistic and know that probably the end of the selection process more than one FW that can be used and the definition will ultimately be a matter of preference with a degree of uncertainty. The final answer will know only after being advanced in the first project and can make mistakes and must reconsider its decision. For this reason it is important to choose as the first non-critical project experience.
The points then I will not appoint a special order.
Points to consider when choosing a FW
Knowledge of computer
It is critical to assess where the team is comfortable working with. That is if I have all Java programmers probably best to find a Java FW in this way the team can quickly learn the FW and not have to waste time studying the details of another language. On the other hand FW There are good almost all the languages so it should not be a problem to fix this. The exception to this rule would be if we are working with outdated language such as Cobol or Clipper. But here we are facing a major problem is a technological upgrading of systems.
Do we need something that solves only the submission or need to work on all layers?
It is important to determine what degree of freedom when we choose. That is, this is a case in which we armed the system and that we should only give or web presentation is a case in which we can choose from how to submit form data to persist. Depending on this we agree to use something that all our requirements solutions or simply focus on what we need is to solve the web presentation. Based on this we can divide the FW divided into two groups and thus not be ruled out of our interest. The groups are:
Frameworks full stack
Are those with a complete solution ranging from the presentation layer to persistence layer of information. The newer ones are based on the MVC pattern. Some examples of these are:
- Rails in ruby and you could say that is the star of the moment
- Groovy Grails
- Php CakePHP
- Spring Roo and Java SEAM
- Python Django
Itemize each is not our intention to simply limit myself to commenting that most are based on the principles of CoC (convention over configuration), DRY (Do not Repeat Yourself) and that its basic composition consists of a processor for templates design view (which generate dynamic pages), a dispatcher that following certain conventions HttpRequests decides to dispatch the service request. To manage the data have an ORM framework that provides dynamic query building and a number of features that simplify the job.
Solo show:
These are the ones that are geared only to the presentation layer.
Examples of this type are:
- GWT-Google Web Tookit, which generates a 100% JavaScript but that is programmed in Java
- JSF: Java Server Faces is the framework of the official Java components
- ASP.NET: that is the option within Microsoft
Support (community, manufacturer, books, certification, future prospects)
An important point, especially in OS projects is to see the community around the framework is used. It is important to investigate whether there is a company investing resources in product development or is simply and solely driven by the community. In the latter case is when "size does matter" and depending on the size of the community that supports it depends on the support that we have. For this is the best framework search page report that many bugs there are, how fast are solved, how many developers there correcting tickets. Following this same line there is to see how often a new version comes out and if there are versions designed to generate a stable version or versions only come out when new features. Given that we have to learn to use the framework you have to study the quality of the documentation of this, to see so many books published (eg Amazon) is on the subject and if you offer some kind of certification and / or training.
Existence of successful projects
As our intention is to use the FW for a product that will eventually go into production probably will not want to be guinea pigs. If the FW is a little bit serious then you should have on their website referring to systems that are implemented with this. Not a bad idea if possible take a look at these and see how well they work. It would be great to find a blog of one of these projects in which they discuss the experience during system development.
Integration with existing platform
If the project is part of a complex ecosystem, then we must take into account the possibilities of integration that has the FW and if these are acceptable within the architecture of our product. For example if we have to interact with a system that JEE is important to establish facilities to invoke EJB service gives me the FW. Of course it is always possible to develop a layer that is responsible for the interaction, but if it natively supports FW not only save labor but are reusing something that is tested and used by others.
Learning Curve
The point today is misleading because modern FW have a very fast learning curve initially but that to reach expert levels is very time consuming as any other framework. If we add that most FW are OS with documentation of poor quality, there is probably no local support and to enable us have to travel many miles (at least if the South like me). Which makes the learning capacity of the equipment is an important factor. In some cases to get to solve a problem will be necessary to study the source code of FW. Should we be lucky enough that the budget allows us to train the team and / or support contract then do not doubt it. Headaches and time you can win it surely.
Test, test and test
Inevitably, in order to determine the FW will have to allocate resources and perform some tests before reaching a conclusion acceptable and justified. It is not necessary to prove all to be assured that we are using the best. When we evaluate remember that we are looking right for the context that we should use and best overall. With a good preliminary analysis we should probably not try more than two or three FW. For the test to be as comparable as possible we should choose a project to implement e type with which we will evaluate FW ..
How do we compare the FW?
For comparison of the FW I used a tool that has helped me time to assess and may be helpful for you too. The tool is a simple table that reflects most of the points made. In this table we consider the FW giving a score for each point where we would have a maximum allowable and the maximum sum of all the points will add up to 100. By defining different maximum points are priority for items to be assessed according to our context. For example if we are in a case where we have a number of existing systems with which we interact surely the ability to integrate the FW is one of the most important points to evaluate whereas if we do not have to interact with other systems, we have time tyrants and already formed a team with little web experience then the learning curve is a turning point in our choice.
To clarify this point let's look at an example:
Max | FW 1 | FW 2 | FW 3 | FW 4 | |
|---|---|---|---|---|---|
Support | 25 | 15 | 10 | 20 | 5 |
Successful project | 10 | 5 | 10 | 10 | 0 |
Integration | 50 | 25 | 40 | 35 | 45 |
Learning Curve | 15 | 15 | 10 | 10 | 5 |
Total: | 100 | 60 | 70 | 75 | 55 |
The reading could make the above table is that we test with the FW2 and FW4 to define which of these two is that we use. Through the study we conducted redijimos at least half the amount of FW to study and have a table that justifies our choice.
Obviously the more you add rows to the table will have more information to justify the choice.
Just in case clarified that the maximum allocated are examples and you should define your own according to their needs.
In summary ...
In summary when selecting a FW must follow three steps:
First we assess the knowledge of the equipment and determine what you want if you FW to be full-stack or single presentation.
Once we have this and knowing the language of preference can search for the subset of FW to evaluate. To facilitate evaluation A form as seen in the previous section.
Finally with the best ranked FW performed the tests which are done with a project implemented in each of the FW.
After all this we know what the FW to use. It seems a lot of work, no? If safe it is, but it is the only way to make a decision minimizing the risk of making mistakes ... and when the technology decisions of a company depends on us is good to have tools to justify our decisions and in particular to ensure the success of our work.
