Software frameworks provide developers with powerful tools to develop more flexible and less error-prone applications in a more effective way. Software frameworks often help expedite the development process by providing necessary functionality “out of the box”. Such things include user/role management, data access, caching, and much more. These frameworks aid in helping you focus on the more important details of design and even project management by alleviating the need to reinvent the wheel for common development needs.
You can also take a look at
- an extensive comparison of web application frameworks1 on Wikipedia. The article provides a growing list of various frameworks and features they have to offer;
- the review of existing CSS Frameworks2 we’ve presented few months ago.
Before diving in, it’s necessary to first grasp the idea behind one of the fundamental concepts for web-applications. In the context of frameworks the model-view-controller architecture is particularly important, as this model is typical for most web-applications and is the definitive approach to choose once developing a new web-project.
Model-View-Controller (MVC) Architecture
MVC is a software approach that separates application logic from presentation. In practice, it permits your web pages to contain minimal scripting since the presentation is separate from the PHP scripting.
- The Model represents your data structures. Typically your model classes will contain functions that help you retrieve, insert, and update information in your your database.
- The View is the information that is being presented to a user.
- The Controller serves as an intermediary between the Model, the View, and any other resources needed to process the HTTP request and generate a web page.
There is also the Model-View-Presenter6 (MVP) model, and also the N-Tier Architecture7 approach amongst others. The difference between MVC and MVP in particular revolve around how data is passed from the model back to the view. In MVC it goes from the model to the view while MVP goes back through the presenter when handing data back to the view.
- CakePHP8 is a PHP framework that works on the MVC architecture and offers caching, application scaffolding, validation of model data and even a presentation API. One of the most popular PHP frameworks.
- CodeIgniter10 is a PHP framework that also uses the MVC platform, has classes for data access, e-mail, FTP, and XML-RPC. Also, CodeIgniter has an exciting community and thorough documentation to get you started.
- The Zend Framework12 is the self-proclaimed “leading open-source PHP framework.” Services included in the API include Ajax (JSON), search, syndication, web services, and a fully object oriented PHP class library.
Further PHP Frameworks
- Symfony14 – A feature packed framework, but has a reputation for being server-intensive.
- Prado15 – A component framework for PHP5 that has similar event based web apps similar to ASP.NET.
- BareBones16 – a one-file, no-configuration, MVC framework for PHP5.
- Spring Framework17 is a MVC Java framework that can run on any J2EE server. The framework has a multi-layered architecture with an extensive API and supporting documentation.
- Apache Cocoon framework21 is a Java framework built around the concepts of separation of concerns and component-based development. There is a strong emphasis on working with XML and serializing into other portable formats.
Further Java Frameworks
- Aranea23 – a MVC framework that includes a web integration layer.
- AppFuse24 – a framework that is a self-described “project skeleton” similar to new projects created in an IDE.
- The .NET Framework25 is an application framework taking application development by storm with its impressive collection of functionality. The great thing about the .NET framework is that you can build it around the MVC framework if you wish (there is an official Microsoft implementation coming out), or you can create your own architecture.
The .NET framework is available out of the box for C# and Visual Basic, but there are extensions available to allow languages like PHP to access and utilize the framework. Look out for some new features including the Windows Workflow Foundation26 for building powerful business solutions and Silverlight 27which is set up to be a direct competitor to Flash.
- MonoRail29 is a MVC framework where the controllers handle solely application flow, the models represent the data, and the view is just about presentation logic. If your project depends too much on third party Web controls or if your IT team skill set is totally centered around WebForms, MonoRail would not be a good choice.
- Ruby on Rails31 has taken the programming world by storm by popularizing the MVC approach to application development. The framework came out the work of 37Signals 32on their popular Basecamp 33application. There is also a great emphasis on agile development to “release early and release often.
Further Ruby Frameworks
- Nitro35 – a Ruby framework, but at the current time it lacks substantial documentation for their API.
- Camping36 is a micro-framework weighing 4Kb.
- Ramaze37 has principles on keeping things simple, modular design, and minimal dependencies with an impressive source browser for documentation.
- Gluon38 comes from the billows of DePaul University designed for agile development and secure database-driven web-based applications.
- Django39 is the ever popular Python framework that has an impressive template system, caching, dynamic database access API, and more. Many high-profile sites use it including The Washington Post40 and Pownce41.
While these frameworks might provide the Ajax-functionality, they are not meant to actually complete the data transaction and manipulation. A client-side framework is usually a smaller subset in a larger application framework.
- jQuery55 continues to rise in popularity due to its extensive API and active development. jQuery is a great balance of complexity and functionality.
- For ASP.NET developers you can’t beat the ASP.NET AJAX57 framework which is built into the .NET Framework as of 3.5, but you can also download it for previous versions. The amount of documentation, examples, and community continues to increase. There are controls that you can simply drag-and-drop an update panel on an ASPX page and process Ajax!
- Ext JS60 – Originally built as an add-on to the YUI it can now extend Prototype and jQuery. Includes an impress interface.
- Dojo61 is a small library focused on interpreter independence and small core size.
- MochiKit6244 – A framework that has focus on scripting language standards including ECMAScript63 and the W3C DOM64.
- Yet Another Multicolumn Layout68 (YAML) is a XHTML/CSS framework for created modern and flexible floated layouts. It even includes a generator!
- Blueprint70 is one of the more mature CSS frameworks with a focus on layout, typography, and even including a print stylesheet.
- Content with Style72 – a CSS framework to aid in layouts and basic CSS design elements, but its development has slowed down73.
- Yahoo! UI Library: Grids CSS75 – Yahoo!’s CSS library for layouts.
Considerations When Choosing
There are a couple of things to keep in mind when choosing a framework.
- Pick a framework that has extensive and accurate documentation. It is invaluable as you attempt to implement the technology.
- The framework should provide just that — a framework — that can fit your particular design methodology.
- Be sure to ask other developers about their experiences with frameworks in your chosen programming language.
- The larger the community the larger the odds that you will be able to find help when you need it, and it will continue to be improved and developed.
- 1 http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks
- 2 http://www.smashingmagazine.com/2007/09/21/css-frameworks-css-reset-design-from-scratch/
- 3 http://codeigniter.com/user_guide/overview/mvc.html
- 4 http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/app-arch/app-arch2.html
- 5 http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/
- 6 http://www.mimuw.edu.pl/~sl/teaching/00_01/Delfin_EC/Overviews/ModelViewPresenter.htm
- 7 http://www.developerfusion.co.uk/show/3058/2/
- 8 http://www.cakephp.org/
- 9 http://www.cakephp.org/
- 10 http://codeigniter.com/
- 11 http://codeigniter.com/
- 12 http://framework.zend.com/
- 13 http://framework.zend.com/
- 14 http://www.symfony-project.com/
- 15 http://www.pradosoft.com/
- 16 http://code.google.com/p/barebonesmvc-php/
- 17 http://www.springframework.org/
- 18 http://framework.zend.com/
- 19 http://code.google.com/webtoolkit/
- 20 http://code.google.com/webtoolkit/
- 21 http://cocoon.apache.org/
- 22 http://cocoon.apache.org/
- 23 http://www.araneaframework.org/
- 24 http://appfuse.org/display/APF/Home
- 25 http://msdn2.microsoft.com/en-us/netframework/default.aspx
- 26 http://msdn2.microsoft.com/en-us/netframework/aa663328.aspx
- 27 http://silverlight.net/
- 28 http://msdn2.microsoft.com/en-us/netframework/default.aspx
- 29 http://www.castleproject.org/monorail/
- 30 http://www.castleproject.org/monorail/
- 31 http://www.rubyonrails.org/
- 32 http://www.basecamphq.com/
- 33 http://www.basecamphq.com/
- 34 http://www.rubyonrails.org/
- 35 http://www.nitroproject.org/
- 36 http://code.whytheluckystiff.net/camping/
- 37 http://ramaze.net/
- 38 http://mdp.cti.depaul.edu/
- 39 http://www.djangoproject.com/
- 40 http://www.washingtonpost.com/
- 41 http://www.pownce.com/
- 42 http://www.djangoproject.com/
- 43 http://www.turbogears.org/
- 44 http://www.mochikit.com/
- 45 http://www.turbogears.org/
- 46 http://www.prototypejs.org/
- 47 http://www.prototypejs.org/
- 48 http://script.aculo.us/
- 49 http://www.digg.com/
- 50 http://www.apple.com/
- 51 http://www.basecamphq.com/
- 52 http://script.aculo.us/
- 53 http://mootools.net/
- 54 http://mootools.net/
- 55 http://jquery.com/
- 56 http://jquery.com/
- 57 http://www.asp.net/ajax/
- 58 http://www.asp.net/ajax/
- 59 http://developer.yahoo.com/yui/
- 60 http://extjs.com/
- 61 http://dojotoolkit.org/
- 62 http://www.mochikit.com/
- 63 http://www.ecma-international.org/publications/standards/Ecma-262.htm
- 64 http://www.w3.org/DOM/
- 65 http://warpspire.com/features/css-frameworks/
- 66 http://mondaybynoon.com/2007/08/27/please-do-not-use-css-frameworks/
- 67 http://www2.jeffcroft.com/blog/2007/nov/17/whats-not-love-about-css-frameworks/
- 68 http://www.yaml.de/en/
- 69 http://www.yaml.de/en/
- 70 http://code.google.com/p/blueprintcss/
- 71 http://code.google.com/p/blueprintcss/
- 72 http://www.contentwithstyle.co.uk/
- 73 http://www.contentwithstyle.co.uk/Blog/162/hi-guys-whats-happening-with-cws/
- 74 http://www.contentwithstyle.co.uk/
- 75 http://developer.yahoo.com/yui/grids/