Onion Architecture

I will try to explain what Onion Architecture is, pros and cons and implementation example.
 
So first of all software architecture's like a blueprint for both the system's behavior and the mechanisms used to achieve that behavior.
Architecture provides structured approach to managing complexity of software systems. It supports scalability, maintainability and flexibility by defining patterns and practices, making it easier to understand, promoting code reuse and adapting to changing requirements.
 
Origins of Onion Architecture
With commonly used traditional layered architecture, each subsequent layer depends on the layers beneath it. This creates thight coupling, makes it challenging to replace, upgrade or adapt changes without affecting all layers. (As Palermo says when explainin this arch.: "However, without coupling, our systems wouldn’t do anything useful, but this architecture creates unnecessary coupling.")
 
 With this architecture, dependency/coupling is towards the center. All code can depend on layers in the center but can not depend on layers further out.
 
Onion Architecture

Number of layers may vary depending of the application but domain model is always at the core. Domain model is not coupled to anything but itself.