For Software development, currently one of the ‘in things’ is the MVC coding pattern (along with it’s related counterparts MVP and other variations). Event Driven patterns are also quite popular and there are just as many good Event Driven frameworks on the net as there are MVC to satisfy every architects needs.
These days everyone including us are pushing their own development frameworks or coding standards. Microsoft is one of the dominant vendors in this area and they produce some very good development environments (Visual Studio and their Express counterparts). They also preach their MVC and WebForms (event driven) frameworks and these are quite popular if you check your local Job ads. They achieve what they were created to do and are constantly improving with each version – however there is a serious downside to how they are architected.
Microsoft’s MVC and WebForms frameworks have their front end (which runs in a browser) so tightly coupled with their back end (which typically runs on a server) they are difficult if not impossible to separate. For a business that develops in-house software only or wants to call themselve’s ‘a Microsoft House’ – some of the time it may not matter, however, time and time again, I’ve walked into a business and they have pondered how to adapt their .Net MVC and WebForm applications to work on non-Windows servers. Now, if they were to sit back and evaluate every available framework before they started their project, or perhaps just made some careful architectural decisions it may not have been an issue – and to be fair no-one can predict or cater for every future requirement or product direction.
Something to think about when choosing the right framework for your projects that you may not have already. How easy is it to replace the front end without the back end and vice versa? Can multiple backend’s be supported concurrently? Do you only want to install/host your software on a Windows server? What about Linux, OSX or Android? Android? Why would you want to host your web app on Android? With the right choice of technologies your web app will run hosted on android with no additional development, this will give your application the ability to work out of range of the internet – of course you could spend additional effort and develop a custom android solution, but then your customers are going to complain about lack of functionality… or you are going to add another 33% or more to your budget assuming you can share the same back end for two different clients?
As previously mentioned Microsoft produce some very good development environments and I regularly use Visual Studio by choice, actually it rocks! However using Visual Studio and C# (or VB.Net) doesn’t negate structuring your product in a way that gives you the flexibility you need/should have or the performance your customer’s expect. Structure your product right and you won’t have tied your entire application (front and back ends) to Microsoft for the foreseeable future.
tip: jQuery is a very good semi-low level library that I like to use in most projects and even Visual Studio itself uses to richen your product’s GUI experience. Interestingly, jQuery provides out of the box, much of the functionality you require to create in a very short time (less than a day) your very own nice, structured, flexible and maintainable Event Driven form pattern with loose coupling between the front and backends. You can of course with a little more time create a losely coupled MVC if that’s your preference.