But we will just add the BaseAPI Controller as the base class. Let’s look at one of the most popular Architecture in ASP.NET Core Applications. Here is a simple diagrammatic representation of a variation of the N-Layer Architecture. The presentation Layer usually holds the Part that the User can interact with, i.e, WebApi, MVC, Webforms, and so on. Business Logic is probably the most important part of this entire setup.

onion software architecture

The higher the coupling, the lower the ability to change and evolve the system. The great thing about this approach is that the migrations will be automatically applied when we create new migrations, further down the road. To learn more about migrations and how to seed data with EF Core in both .NET 5 and .NET 6 check out this article Migrations and Seed Data with Entity Framework Core. However, since the Web application and the database server will be running inside of containers, how are we going to create the actual database for the application to use? We could create an initialization script, connect to the Docker container while it is running the database server, and execute the script. To make it straightforward to download the application code and be able to run the application locally we are using Docker.


This is how you can invert the dependencies to build scalable applications. In this article, We will talk about Onion Architecture In ASP.NET Core and its advantages. We will also together build a WebApi that follows a variant of Onion Architecture so that we get to see why it is important to implement such an architecture in your upcoming projects. You can find the source code of this implementation on my GitHub.

The Domain layer, which contains the business logic, can be easily scaled by adding more instances of the application. The Infrastructure layer can also be easily scaled by adding more servers or resources to handle the increased load. The User Interface layer is responsible for presenting the information to the user and receiving input from the user. It can be a web application, a mobile application, or a desktop application.

C# Object oriented programming Composition vs Inheritance

We have connected all of our Onion architecture implementation layers, and our application is now ready for use. However, in the OnModelCreating method, we are configuring our database context based on the entity configurations from the same assembly. As we can see, it consists of the Web project, which is our ASP.NET Core application, and six class libraries. The Domain project will hold the Domain layer implementation.

We can implement this layer in many ways, for example creating a REST API, gRPC, etc. The Service layer sits right above the Domain layer, which means that it has a reference to the Domain layer. The Service layer is split into two projects, Services.Abstractions and Services.

Why Microservices Are Good for Our Project

The option your app might need completely depends on its area, features, and many other details. Amateurs and newcomers in the area will have some trouble figuring out how the system functions. You’ll need an experienced developer to get the most out of onion architecture. By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct. We now know that Onion Architecture has a significant role in implementing a domain-driven design. It refers to the business knowledge that our programme is attempting to model.

There are two basic approaches to representing the layers in the code. The one that we used in our most recent
project was to use a package naming convention. This is the layer where you place classes describing the core of your business. This Architecture style does have some learning curve for developers in the project, but once mastered, pays back many
times. Finally, as with every solution in the IT industry, it is not a one-size-fits-all, and you should always consider
if the architectural style matches your needs.

Why use Onion Architecture?

Due to their clarity, you will always be able to understand which part relies on which layer. If you decide to implement onion architecture in your application, you’ll get multiple benefits. In essence, MVC resolves the separation of concerns problem, but the tight coupling problem remains. I am planning to build a fully-fledged Clean Architecture Solution Template, which you guys can just download and start using for your new projects in no time.

Another difference between the two architectures is the way they handle technical concerns. Clean Architecture places a particular emphasis on using interfaces to decouple components, allowing components to be easily swapped out or replaced. For smaller projects, Onion Architecture might occasionally be over-engineered, adding additional complexity and overhead. The appropriate understanding and application of the architecture may take more effort and training for those who are unfamiliar with the Onion Architecture. CQRS is a development principle claiming that a method must be either a command that performs an action or a request that returns data.

Observability services

Because the layers are separated from one another and can be tested independently, the architecture makes it simpler to develop unit tests. Bounded context is a good fit for a microservices architecture. It is much easier to build a microservice around a bounded context.

onion software architecture

It depends on the use cases and the complexity of the application. It is also possible to create more layers of abstractions depending on application onion architecture needs. E.g. for smaller applications that don’t have a lot of business logic, it might not make sense to have domain services.

Cumbersome when you don’t have many business rules

For example, the UI layer communicates with business logic, which communicates with the data layer. There should be a separation of concerns because none of the layers in 3-tier and n-tier structures are independent. Such systems are complicated https://www.globalcloudteam.com/ to comprehend and keep up with. This traditional architecture’s flaw is its needless coupling. The domain entities are the heart and soul of the system. The onion architecture is based on a domain model with layers connected by interfaces.