Convention over configuration is a software design paradigm which is used by many modern software frameworks including ASP.NET MVC and Web API. It’s also known as “Coding by Convention”. It takes a lot of burden away from developers, which is otherwise required; to handle basic aspects of the application. For example, mapping of database tables with classes, or handling URLs etc.
ASP.NET MVC (Model View Controller) very nicely showcases this software design paradigm via Visual Studio’s ASP.NET MVC Project template directory structure. ASP.NET MVC Project has three folders: “Controllers, Models and Views”, as shown in Figure- 1 below.
Figure-1 Visual Studio MVC project folder structure
ASP.NET MVC framework’s folder structure is based on “Convention over Configuration” and that’s why practically, a class in Models folder can be safely assumed that there is a table with that name in the database. A Controller can be created with a <Name> with a suffix “Controller” (for example, EmployeeController, ProductController etc.) Similarly, an action method in Controllers folder’s controller class can be accessed with Controller class name (name without suffix Controller). For example, Details action method in EmployeeController by convention can be easily accessed via http://domain/Employee/Details
If there is no Convention over configuration paradigm to make any such behavior work, developers need to specify/code some configuration rules to educate the application about interpreting a URL and under which folder or where to look for the resource to serve that request.
Hence, having Convention over configuration is already baked into ASP.NET MVC, developers don’t need to write any code to establish communication mechanism among various application components. To have it function properly, conventions need to be followed and developers need to adhere to those conventions.
For example, all controller classes must reside under “Controllers” folder with <Controller> suffix as convention. For example, Controller\HomeController, Controller\EmployeeController etc.
Views folder is known to have all the views, and convention tells Controller where to look for a View(s) associated with a controller action method. As shown in figure 2 below, each action method in Controller\HomeController refers to individual cshtml under “Views\<folder with controller name>”.
Figure-2 Convention over configuration in Action
Hence, Convention over configuration helps developers to easily communicate with the ASP.NET MVC web framework by providing the pre-defined conventions, as shown in Figure-3 below.
Figure-3 Convention over configuration in action.
Note that if you don’t follow the conventions correctly, for example, create a controller class named DefaultController1.cs under Controller folder and build it; then, Visual Studio IDE will not report any issues and it will build successfully.
Or simply move HomeController out of Controllers folder, under the project. Hit the route http://locathost/Home/About and you will get 404.
Building a solution successfully doesn’t mean it will work.
No error was reported because as a developer, you are given freedom to name your controller class etc. as per your wish; so you have freedom. But to have it working, “Convention needs to be followed strictly” hence, it will not work. But once you adhere to the convention by renaming DefaultController1 to “DefaultController” or moving HomeController back into Controllers folder; and you hit the route, then it will start to function as expected.