My Umbraco Application Architecture Overview

Application layers and their dependencies

Umbraco unit testing TDD Tuesday, May 20, 2014

In order to achieve a loosely coupled application, I created a business layer and domain entities on which both the presentation and data access layer projects depend on.

The presentation layer uses domain entities and calls the business layer methods and the data access layer uses domain entity classes to return data to its caller resulting in a classic 3-tier application.

Bomboca.Marketing.Web
Bomboca.Marketing.Business.Domain
Bomboca.Marketing.Business.Abstractions
Bomboca.Marketing.DataAccess.Abstractions

Having the business layer, as thin as it may be, in the middle of the other two layers allows us to change (or add) any layer e.g. use the same business logic to load a mobile application or an API for 3rd parties. In practice, changing the main data source to another CMS and keeping the umbraco presentation layer would make less sense (but it would still be viable to use additional data sources).

At this point, the business and data access layers are abstractions only. For each of these, I created two other projects with the respective implementations.

Bomboca.Marketing.Business.Implementations
Bomboca.Marketing.DataAccess.Implementations

Check the next post to see how all this is tied together using dependency injection.