0% found this document useful (0 votes)
76 views

Clean Architecture

The document discusses clean architecture principles and how to structure an application according to those principles. It outlines the domain, application, infrastructure, and presentation layers and provides examples of implementing each layer according to clean architecture.

Uploaded by

Ajay Rai
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
76 views

Clean Architecture

The document discusses clean architecture principles and how to structure an application according to those principles. It outlines the domain, application, infrastructure, and presentation layers and provides examples of implementing each layer according to clean architecture.

Uploaded by

Ajay Rai
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 34

Clean Architecture

Jason Taylor

Join the Conversation #GOTOCph @JasonGtAu


Join the Conversation #GOTOCph @JasonGtAu
Jason Taylor
SSW Solution Architect

Visiting from Australia

.NET Developer Since 2002

Keep It Simple, Stupid!

jasongtau github.com/jasongt

codingflow.net youtube.com/jasongt

Join the Conversation #DotNetCoreSuperpowers @SSW_TV


Clean Architecture

Domain Layer

Application Layer

Agenda Infrastructure Layer

Presentation Layer

Next Steps
Clean Architecture
Presentation

Application

Independent of frameworks

Testable
Domain
Independent of UI

Independent of database

Independent anything external


Infrastructure

Join the Conversation #GOTOCph @JasonGtAu


Northwind Traders Sample
Clean Architecture

ASP.NET Core 3.0

Entity Framework Core 3.0

ASP.NET Core Identity 3.0

Repo bit.ly/northwind-traders
Join the Conversation #GOTOCph @JasonGtAu
Clean Architecture Template
.NET Core Template Package

ASP.NET Core 3.0

Entity Framework Core 3.0

ASP.NET Core Identity 3.0

Repo bit.ly/ca-sln
Join the Conversation #GOTOCph @JasonGtAu
Key Points
Domain contains enterprise-wide logic and types
Application contains business-logic and types
Infrastructure contains all external concerns
Presentation and Infrastructure depend only on Application
Infrastructure and Presentation components can be replaced
with minimal effort

Join the Conversation #GOTOCph @JasonGtAu


Clean Architecture

Domain Layer

Application Layer

Agenda Infrastructure Layer

Presentation Layer

Next Steps
Overview
Presentation

Application

Entities

Value Objects
Domain

Enumerations

Logic

Exceptions Infrastructure

Join the Conversation #GOTOCph @JasonGtAu


Demo
Reviewing the Domain layer

Join the Conversation #GOTOCph @JasonGtAu


Key Points
Avoid using data annotations
Use value objects where appropriate
Create custom domain exceptions
Initialise all collections & use private setters
Automatically track changes

Join the Conversation #GOTOCph @JasonGtAu


Clean Architecture

Domain Layer

Application Layer

Agenda Infrastructure Layer

Presentation Layer

Next Steps
Overview
Presentation

Application
Interfaces
Models
Domain
Logic
Commands / Queries
Validators
Exceptions Infrastructure

Join the Conversation #GOTOCph @JasonGtAu


CQRS
Command Query Responsibility Segregation

Separate reads (queries) from writes (commands)

Can maximise performance, scalability, and simplicity

Easy to add new features, just add a new query or command

Easy to maintain, changes only affect one command or query

Join the Conversation #GOTOCph @JasonGtAu


CQRS + MediatR = ♥
Define commands and queries as requests
Application layer is just a series of request / response
objects
Ability to attach additional behaviour before and / or
after each request, e.g. logging, validation, caching,
authorisation and so on
Join the Conversation #GOTOCph @JasonGtAu
Demo
Reviewing the Application layer

Join the Conversation #GOTOCph @JasonGtAu


Key Points
Using CQRS + MediatR simplifies your overall design
MediatR simplifies cross cutting concerns
Fluent Validation is useful for all validation scenarios
AutoMapper simplifies mapping and projections
Independent of infrastructure concerns

Join the Conversation #GOTOCph @JasonGtAu


Clean Architecture

Domain Layer

Application Layer

Agenda Infrastructure Layer

Presentation Layer

Next Steps
Overview
Presentation

Application

Persistence

Identity
Domain

File System

System Clock

API Clients Infrastructure

Join the Conversation #GOTOCph @JasonGtAu


Unit of Work and Repository Patterns
Should we implement these patterns?

It isn’t always the best choice, because:

EF Core insulates your code from database changes


DbContext acts as a unit of work
DbSet acts as a repository
EF Core has features for unit testing without repositories
Join the Conversation #GOTOCph @JasonGtAu
What do the experts think?

I’m over Repositories, and No, you don’t need a repository. No, the repository/unit-of-work
definitely over abstracting your But there are many benefits pattern isn’t useful with EF
data layer. and you should consider it! Core.

Join the Conversation #GOTOCph @JasonGtAu


Demo
Reviewing the Infrastructure layer

Join the Conversation #GOTOCph @JasonGtAu


Key Points
Independent of the database
Use Fluent API configuration over data annotations
Prefer conventions over configuration
Automatically apply all entity type configurations
No layers depend on Infrastructure layer, e.g.
Presentation layer
Join the Conversation #GOTOCph @JasonGtAu
Clean Architecture

Domain Layer

Application Layer

Agenda Infrastructure Layer

Presentation Layer

Next Steps
Overview
Presentation

Application

SPA – Angular, React, Vue

Web API Domain

Razor Pages

MVC

Web Forms Infrastructure

Join the Conversation #GOTOCph @JasonGtAu


Demo
Reviewing the Presentation layer

Join the Conversation #GOTOCph @JasonGtAu


Key Points
Controllers should not contain any application logic
Create and consume well defined view models
Open API bridges the gap between the front end and
back end
NSwag automates generation of Open API
specification and clients
Join the Conversation #GOTOCph @JasonGtAu
Clean Architecture

Domain Layer

Application Layer

Agenda Infrastructure Layer

Presentation Layer

Next Steps
Using the Solution Template
C:\Code\CaTodo>dotnet new -i Clean.Architecture.Solution.Template
C:\Code\CaTodo>dotnet new ca-sln
The template "Clean Architecture Solution" was created successfully.
C:\Code\CaTodo>

Join the Conversation #GOTOCph @JasonGtAu


Join the Conversation #GOTOCph @JasonGtAu
Join the Conversation #GOTOCph @JasonGtAu
Thank you!
@jasongtau

bit.ly/ca-sln
bit.ly/northwind-traders

[email protected]
www.ssw.com.au
Sydney | Melbourne | Brisbane

You might also like