As per wiki framework is “an abstraction in which software providing generic functionality can be selectively changed by additional user-written code, thus providing application-specific software” Interesting here is to see the word abstraction. What is abstracted by the software?
Windows Communication Foundation (WCF) abstracts communication mechanism. Developer can use this framework to build applications which can talk to each other. WCF abstracted various communication mechanism such as MSMQ, HTTP, TCP. Also the framework addressed the concerns such as security, serialization that revolve around the communication requirements.
Similarly there are various frameworks for building UI such as MVC, ASP.NET, WPF so on. On top of these framework people try to write their own custom framework. Ofcourse the custom framework written on top of these various framework do fit the domain, but did anyone consider the downside of it?
One of My experience with custom framework is awful. The framework offered nice features such as caching, hosting service and what not. I had installed windows azure bus on my machine. And the custom framework I was using started breaking. Having no clue and no one to go to, I had to debug into the framework code. I did find a place where this heavy weight custom framework is scanning all communication channels. Framework picked azure bus as its communication mode, and was missing configuration for it. I am sure the guys who wrote framework missed this scenario which could happen, and did not add configuration for it.
What is the result of this mishap? The framework which is intended to reduce development time added hurdles to it. I spent first half of day contacting the framework developers, and then second half of day debugging the framework myself.
The funny part is framework developers could not root cause the problem because there was no windows azure bus installed on their machine. More embarrassing is to say “it doesn’t work on my machine, but works everywhere else”
Like the framework definition goes the framework should solve the problem for only one abstraction (single responsibility). Does wiki say abstractionS? Should the framework choose the communication channel for the user, or user should choose the channel :)?