Let me get to the meat of the problem straight away and declare the following confrontational statement:
We need another MVC framework like we need a hole in the head.
After my work with horn, I have a fairly good idea about the number of IOC (castle Windsor, StructureMap, Autofac, Ninject) frameworks, mocking frameworks (Moq, Rhino Mocks, Moles) and build engines (Nant, PSake, Phantom) that .NET has. I know because I have wrestled with most, not to mention the countless ways there are to get your source control from the remote SCM and build it. Each .NET OSS project lives in a vacuum with total disregard or care about the other OSS projects it carries as dependencies in its shared lib folder.
It now seems that we need several different MVC frameworks, Monorail, ASP.NET MVC, VICI MVC, Openrasta et al. Of course each one is better than the rest. Each one expresses separation of concerns more than the others. Each one adheres to the now infamous SOLID principals more so than the rest. Please, give me an ounce of credit; this is just another lazy way for you to fan your programming feathers by copying an existing paradigm and putting your own slant on it. Any developer will testify that if we write something once, discard it and start again on the same problem, you will get a better solution. This is especially true if you have the source code from your original attempt or somebody else’s attempt to later chastise. Then after we have put our own slant on it we smugly declare how our new code has:
- Better Separation of Concerns
- Is more true to SOLID
- 1000 times More testable than the rest
- 100000x more mockable because we put an interface round x
- We use compositon over inheritance more. Big Yawn to this one
- Looser coupling by a magnitude of 400000xyz (xyz is the unit for measuring loose coupling don’t you know)
If I had the inclination, I would love to draw up a comparison table on each category (IoC, mocking etc.) to see just how different each one is.
What exactly does all this choice give us? Or for FUBUMVC I ask the question:
Why the hell should I care? How is the front controller pattern going to make me more productive? If so how?
It seems we have a 100 different can openers each with their own ornate carving on the handle.
What about if we had a common project folder like we have in rails? Then convention over configuration is much easier because we can start guaranteeing where things are. This will never happen while we have the arrogance and snobbery that abounds in .NET OSS.
It will never happen in .NET while these OSS snobs rip up old ideas and replace them with more of the same but hey, it is 10 times more SOLID than the other guy and soooooooooo much more testable.
My wish for .NET is that we have rails in .NET. One only has to look at the number of generators and rake commands that are available in a rails directory to know that if everyone pushes in the same direction then we can actually build something of use. Again this will never happen. This could be possible with Ironruby but it will never get buy in from these OSS craftsmen snobs.
It will never happen because .NET OSS is steeped in arrogance and exhibits a holier than thou attitude I find tedious.
I will further ask this question:
Where is the innovation?
What gives me the right to ask this or for that matter write this post? I would say that with horn we at least tried to do something game changing and provide a common way for people to get their open source binaries and thus smooth adoption. We faced multiple hurdles with the multiple ways that .NET OSS chooses to bury it’s head in the sand and ignore the rest of the OSS landscape. We had to battle with git, svn, nant, msbuild, psake et al.
When we started developing horn, I read blog posts from people who stated that we were wrong and they were going to create a gem like experience for .NET. There was ngems, rocks and other failed attempts. Where are they now? How far did you get? Not very is the answer. I persevered with horn because it was an extremely difficult problem to solve. At the time I and others were looking for an outlet to do some coding that was and is more challenging than our day jobs. We chose something extremely difficult and did not go down the same old tired route of an IOC container, a mocking framework or God help me, another web MVC framework that is not too dissimilar than the rest.
.NET is a dead platform. The vast majority of .NET shops have a laughable approach to development. This leaves us with ALT.NET which has turned into a bunch of arrogant prima donnas bleating about their craftsmanship and how their approach is better than the rest.
This constant division and lack of new ideas is boring in the extreme.
You can stay in your boring little vacuum and have your sycophantic twitter followers stroke your enlarged ego all you want. I for one do not buy into it.
One only has to watch the pandering and kowtowing attitude to anybody in the same virtual vicinity of Ayende, to feel nauseous. You know who you are and please get a life. Don’t be a sheep.
My last plea is this:
Stop looking at existing paradigms and come up with your own.