SOLID Asp.net Web API Project Organization for maintainability and scalability
I like to organize my Wep API projects using the following solution organization (Sorry for the ugly diagrams…).
Each circle in the diagram is a .Net project (or DLL) in the solution:
Solution.Global: The global DLL contains POCO objects and the public interfaces of all the others DLLs. All the DLLs have a reference to the Global DLL.
Solution.IoC: The IoC project declares the bindings between abstractions (interfaces in Global) and implementations (Objects in each DLL). The code of this DLL can easily be re-used.
Solution.WebApi: The Web API project is the composition root for the IoC and therefore it is the only DLL that points to the IoC project.
Solution.DAL: The application data access layer.
Solution.WebClient: The front-end application.
By using this separation we can follow the SOLID principles, for example I can replace the
Solution.DAL DLL for a new one by just changing the binding in the
The back-end projects and front-end projects only communicate to each other via AJAX and there is not C# or ASP at all in the front-end.
I feel really strong about this way of organizing web applications because I believe it is highly maintainable and scalable. For example, if in 2 years time Bootstrap or Angular become a legacy technologies
we can create a new front-end and reuse the 100% of the back-end. We could also create a new front-end application that re-use the same back-end reducing the amount of work.
If I the application is too complex I could add extra DLLs (Business, Helpers, PDF service…) to separate concerns as needed: