The MVC framework is the new “hot” thing in the ASP.NET world for developers. As such, everyone has at least one blog entry about it. So, I think it’s time I jumped on that ship. Though, I wanted to voice a few concerns with the MVC Framework, or at least how people perceive it.
The MVC design pattern is by no means new. It’s been around since around 1979, and .NET is certainly not the first framework that supports the MVC Pattern, and nor is Microsoft’s MVC Project the first for .NET. Spring is a very popular MVC solution for Java developers, and there is a .NET port of it as well. Though, I’m not here to give a history lesson either.
I often hang out at the ASP.NET Forums as a moderator and contributor. The MVC Framework is a pretty hot forum over there at the moment. Though after reading several posts, I can’t help but get the feeling that several people aren’t certain as to what the MVC design pattern is trying to solve.
So, at it’s core, MVC is a design pattern that was originally used in SmallTalk-80. The original paper is up for interpretation, but at it’s core theory, MVC’s original goal was clean separation between layers of your application.
Yes, MVC gives you cool features like Routing, and a big bonus of Unit Testing. Anyone that has been using unit testing before knows that good separation of your code is important to achieve practical unit tests, especially those who also practice Test Driven Development; but the true goal of MVC (or MVP for that matter) is decoupling logic.
Some people originally made the claim that the current ASP.NET model (before the MVC project) was an MVC model. Well… mmmnnn…ooo. Not quite. It could be argued that it was, but the “not quite” was the event processing in .NET. The initial argument was that the event handles on controls coupled the code behind too tightly. A better solution would be to have the event handles work with a presentation model.
OK, I’ve been rambling on a little bit. What’s my point (if any)? I suppose that Microsoft’s MVC is pretty cool. I am a little perplexed as to why everyone got so excited about MVC since Microsoft announced they were providing a Framework when there are frankly, better and more mature MVC Frameworks around, and I’ll circle back around to Spring for that one. Spring has been around since .NET 1.1, and since it is a Java port, they have a lot of experience from there, too. I get concerned that some people really aren’t using MVC for the purpose of decoupling and improving their code; rather for some of its specialized features, such as Routing.
Though, in all honestly I tend to lean towards the MVP pattern myself. Not quite as popular, I still prefer it because the view is not as coupled with the model. A good MVP project is Stormwind NMVP.