| NOTICE |
| This page is still under construction and is not considered done. |
FubuMVC has some specific, highly opinionated views on framework design. This page discusses these opinions and the strategies and tactics used in its design.
Inverted Control
Many frameworks in the .NET space are very draconian in their requirements of the application consuming them. They require your application inherit from the framework's base classes, implement their interfaces, etc in order to gain the framework's functionality. In this, more common, style of framework design, the application serves the framework.
Another approach to framework design involves inverting the control so that the framework serves the application. It does this by following a few principles, namely: Loosely Coupled, Highly Cohesive[TODO:link], Separation of Concerns[TODO:link], Inversion of Control[TODO:link] and Dependency Injection[TODO:link], Single Responsibility Principle[TODO:link], and many others.
This framework provides framework services that the application may pull in to accomplish some task if necessary, but there is no requirement for the application to implement interfaces or derive from classes in order to accomplish basic functionality.
Couple to Abstractions
Everything inside the framework should be open for extending (see: Open Closed Principle[TODO:link]) due to the fact that core framework services are abstracted behind small interfaces. The consumer of the framework may replace key functionality of the framework by implementing that interface and providing alternative behavior.
Dependency Injection
Within the framework itself, when framework services depend upon other services of the framework, they require these dependencies to be satisfied (passed in) via a constructor parameter. Dealing with all these dependencies can become tedious which is why FubuMVC is explicitly tied to the use of an inversion of control (IoC) framework such as StructureMap?[TODO:link], Castle Windsor[TODO:link], Ninject[TODO:link], Microsoft's Unity, and possibly others.
Comments (0)
You don't have permission to comment on this page.