Introduction
What is MVC
MVC stands for:
Model (database)
Controller (business logic)
View (what you see + view logic)
It is used to separate the logic from a web application and other types of applications into these 3 logical parts.
There are a lot of people who think this makes development easier and more maintainable. For more information on MVC click here.
What is Ruby On Rails
Ruby On Rails, ROR for short is the framework which took the world by storm.
Or it just caused a storm, one or the other, but I guess it made the whole MVC idea a whole lot more famous.
Ruby is the language on which this framework is built, the characteristics of Ruby as it stands now is that the language is very powerful and expressive but runs pretty slow
What is ASP.NET (Webforms)
ASP.NET is currently set up in a way that it tries to mimic windows programming as much as possible.
This means that it is event driven and supports concepts which make it more like a statefull windows program.
This means that you can for instance drag a button on a webform and double click this button to add an action to it.
Double click the form, to type in an action which is done when the page is loaded.
This means that this form of programming is a form of event driven programming.
What is ASP.NET MVC
ASP.NET MVC is the Microsoft implementation of MVC.
It does away with the event driven programming and it doesn't try to be statefull. With these choices it gains a few things and loses a few others.
Differences Between them in a feature chart
I think the best way to highlight some of the differences between the platforms is to highlight these difference in some charts. So without further ado let's have a look at the differences:
Webforms vs MVC
| | Webforms | MVC |
| URL's | through pagenames / URL rewriting.
Standard: pagename.aspx | through routing programmaticly set up the url's by default this works through REST like interfaces.
Standard: controller/action/param |
| Event driven | Yes | No |
| Statefull | Yes (Viewstate) | No |
| Easily unit tested | No | Yes |
| Easily View tested | same | same |
| Can use designer easily | Yes | No (I think) |
| Double Click to get action | Yes | No |
| Different view engines supported | No | Yes |
| Support AJAX easily | Yes | Yes |
| Support ASP.NET Request / Response objects | Yes | Yes |
| Supports Dynamic Languages | Yes | Yes |
| Can play well with the other | Yes | Yes |
| Abstraction from html | Yes | No |
| Exact control over html | No | Yes |
| Support ORM | Yes | Yes |
| Will be able to use library of third party controls for ASP.NET | Yes | Partial (no state / postback controls only) |
| Works on Linux / Mono | Yes (Partial) | No |
ASP.NET MVC vs Ruby On Rails
| | ASP.NET MVC | Rails |
| Compiled | Yes | No |
| Intellisence | Mostly | Depending on editor |
| Has free IDE | Yes | Yes |
| Can be easily deployed on shared hosting | Yes | not really |
| Can be easily deployed on windows | Yes | No |
| Can be deployed on Linux | No (Maybe if mono picks it up) | Yes |
| Has a built in ORM | No (not yet) | Yes
|
| Has out of the box for multiple Databases | No | Yes
|
| Is resource efficient | Yes | No |
| Extensive caching options | Yes | Yes |
| All URL available | Yes | Yes |
| REST possible | Yes | Yes |
| .Net Framework available | Yes | No |
| Ruby Runtime available | Through interop / CLR implementations | Yes |
| Has an active community around it | Yes | Yes |
I'm missing feature X from this chart
Could be, it's not a complete list of features.
It's just a list of things which seemed nice to compare if you want you can always comment about your favorite pet difference between one of these frameworks / development methods.
Generalisations / when to use which option
The charts above will mostly tell you when you can't use one of the options in the list.
All the platforms will keep evolving but each has it's own strengths and weaknesses at the moment.
ROR is great for when your working on a non windows platform and want to write as few lines as possible and want to work in Ruby.
Webforms is great for when you want quick results with nice building blocks from 3rd party developers and you don't need exact control over your html.
ASP.NET MVC is great for when you want complete control over your html and url's and want unit testing like there is no tomorrow.
Personal preference
My webdevelopment method of choice for now remains to be Webforms this is mainly because of a lot of nice development speed enhancements which are present in this platform.
It's something which makes the easy things pretty fast to do and makes the harder things quite hard and complicated.
I might be going over to some other platform / framework based on what lies ahead in terms of websites / applications to create.
Only time will tell, but for now I remain satisfied with Webforms for a RAD platform.
But what about testing ?
There are a lot of people who like setting up unit tests along with their regular development.
I think my opinion on this is a subject for a whole other posting so I won't go into it any further at this time :)
Conclusion
We are living in a golden age for Internet development there are a lot of options in the web development world, and the possibility's are still growing and evolving at a brake neck pace.
All the choices above will probably be used to amaze us with things that are possible and all will probably still have a place in developers hearts for quite some years to come.
The question is what will the new players bring 5 years from now, and how will these technologies stand up to each other then.