The application architecture contains at least one project. In this case, all of the application logic is encapsulated in one project, compiled into one assembly, and deployed as one element.

Any ASP.NET Core project you create in Visual Studio or from the command line will initially be a comprehensive monolithic project. It will encapsulate the entire behavior of the application, including data presentation, business logic, and data access logic. Figure. 5-1 shows the file structure of an application consisting of a single project.

In the single project scenario, task separation is implemented using folders. The default template used includes separate folders for MVC template responsibilities (models, views, and controllers), as well as additional folders for data and services. With this organization, data presentation details are placed as much as possible in the Views folder, and data access implementation details should be limited to the classes contained in the Data folder. The business logic, meanwhile, is placed in services and classes contained in the Models folder.

Despite its simplicity, a monolithic single project solution has certain disadvantages. As the size and complexity of the project increases, the number of files and folders will grow. User interface related tasks (models, views, controllers) are placed in different folders that are not alphabetically ordered. As UI-level constructs, such as filters or model binders, are added to separate folders, the situation only gets worse. Business logic gets lost in the Models and Services folders, making it impossible to clearly define which classes in which folders should depend on other classes. Such inefficient organization at the project level often results in poorly structured code.

To solve such problems, applications are often organized as solutions consisting of multiple projects, where each project is placed in a separate application layer.