Onion Architecture

Although there is no single silver bullet for every solution, most developers get locked into an architecture that doesn’t scale and changes becomes difficult and slow as the system grows.

Onion Architecture promotes a separation of concerns and a decoupled application.  Loose coupling makes it easier to upgrade or replace components without affecting other parts of the system.

This architecture is best suited for complex behavior and long-lived business applications. It may not be feasible for small websites.

Traditional Layered Architecture

Each layer depends on the layers beneath it and every layer will depend on some common infrastructure and utility services. 

TraditionalLayeredArchitecture

 

Problems with Traditional Architecture

  • Application is built on top of specific technologies that are sure to change
  • Business logic is commonly added to the UI layer
  • Transitive dependencies: makes it easy to take a dependency without putting much thought into it, and now it’s all over the code base.
  • Components are harder to test
  • Logic is easily scattered all over.  Locating code becomes a major effort.

 

The big drawback to this top-down layered architecture is the coupling that it creates.  If coupling prevents easily upgrading parts of the system, then the business has no choice but to let the system fall behind into a state of disrepair.  This is how legacy systems become stale, and eventually they are rewritten.

Onion Architecture

OnionArchitecture

Onion Architecture promotes layers built on interfaces, and then injecting dependencies into those layers.  This allows dependencies to be easily interchanged and unit tests to be written against mock/fake objects.

The key tenets of Onion Architecture described by Jeffery Palermo are as follows:

  • The application is built around an independent object model.
  • Inner layers define interfaces. Outer layers implement interfaces.
  • Direction of coupling is toward the center.
  • All application core code can be compiled and run separate from infrastructure.

Application Core

  • Business workflows, validation rules, domain model.
  • Should not reference any external libraries.  No technology specific code.
  • Defines all technical implementations as interfaces.
    • Application service interfaces provide decoupling of business logic.
    • Domain service interfaces provide object saving and retrieving behavior.

UI and other applications consume the Application Core. This includes ASP.NET MVC, Web API and test projects.

Infrastructure

Implementations of interfaces defined for application and domain services.    Infrastructure is where the EF DbContext is implemented, as well as things like logging, email sending, etc.

Dependency resolution / IoC containers are usually used to wire up core interfaces to infrastructure implementations which run at start up configuration.

References:  Jeffery Palermo, Matt HidingerSteve Smith, Robert C. Martin, Tony Sneed

Comments

  1. Hi Lori,

    Do you have any link where i can see the implementation of this architecture ?

  2. Please let me know if you’re looking for a author for your site.
    You have some really great articles and I feel I would be a good
    asset. If you ever want to take some of the
    load off, I’d absolutely love to write some content for your blog in exchange for a
    link back to mine. Please shoot me an email if interested.
    Kudos!

  3. hello!,I really like your writing so so much! share we communicate extra about your article on AOL?
    I need an expert on this house to solve my problem.
    May be that is you! Looking forward to see you.

  4. join to the unchangeable Mabosway sports betting every
    second by registering – Are you looking for an looking for excitement and further experience in the world
    of online gambling? You have come to the right place, because here you can connect us, the best and most trusted gambling site agent in Indonesia!

    We are privileged to be skillful to manage to pay for
    the best servants to members who are always loyal to trust
    us and make us a gambling partner. Therefore, we have prepared various types of fun and well-liked games such as Mabosway sports betting, casino, lottery,
    and others.

    Not deserted that, there are in addition to many promos that we will meet the expense of and of course
    it is all aimed at the benefit of the members.

    all the facilities that are gratifying for
    you gone you become a zealot here. Here are some of our advantages higher than extra sites:

    The deposit and withdrawal process is fast and accurate
    Members’ personal data and identities are always safe and will not leak
    to supplementary parties
    Mabosway login, one user ID that can be used for various types of games
    Customer staff who are always ready to encourage you 24/7
    Unlimited Bonuses and Promos
    The best minister to supported by years of experience has made Mabosway always trusted by its members and earned the title as
    the best gambling site agent in Indonesia.

Leave a Reply to Lori Peterson Cancel reply

*