Autoplay
Autocomplete
Previous Lesson
Complete and Continue
Pragmatic Clean Architecture
00: Course Introduction
Welcome (0:43)
What you will learn in this course (1:02)
Who this course is for (0:54)
What are the prerequisites for taking this course (1:06)
01: Clean Architecture Fundamentals
Architectural principles & Design principles (6:11)
Clean Architecture layers (3:06)
What we are building & why (1:48)
Chapter recap (0:35)
02: Domain Layer
Introduction (2:00)
Creating the Domain project (1:04)
Defining our first domain entity (4:02)
What is an Entity in Domain-Driven Design? (2:38)
Introducing Value Objects for solving primitive obsession (8:23)
The importance of private setters in the domain model and encapsulation (0:24)
Using the Static Factory pattern in the domain (3:11)
Introducing the Domain Events pattern to the solution (3:08)
Adding Repositories and the Unit of Work to the domain (1:53)
Creating the Booking entity (3:31)
Implementing a Domain service (3:57)
Using Double Dispatch for a better domain model (1:20)
Introducing the Result class to the project (3:16)
Defining a dictionary of domain errors (1:18)
Chapter recap (0:26)
03: Application Layer
Introduction (5:08)
Creating the Application project (0:23)
Configuring dependency injection and installing MediatR (2:31)
Adding the required abstractions for CQRS (3:39)
Implementing Commands with the rich domain model & repositories (8:46)
Defining a domain event handler (4:25)
Implementing Queries with Dapper for blazing performance (9:49)
Solving logging as a cross-cutting concern (3:48)
Creating a Validation pipeline for commands (5:46)
Chapter recap (0:37)
04: Infrastructure Layer
Introduction (1:01)
Creating the Infrastructure project (0:21)
Configuring infrastructure services with dependency injection (3:06)
Adding Entity Framework Core to the solution (1:24)
Configuring Entity Framework Core with dependency injection (1:37)
Creating the Domain entity configurations (3:34)
Automatically applying entity configurations (0:45)
Implementing repository interfaces using a generic repository (2:59)
Implementing the SQL connection factory (1:51)
Publishing domain events inside the Unit of Work (4:17)
Solving race conditions with optimistic concurrency (4:41)
Chapter recap (0:27)
05: Presentation Layer
Introduction (1:05)
Creating the Presentation project (2:39)
Configuring services with dependency injection (0:52)
Adding Controllers and endpoints (5:33)
Setting up Docker Compose and running the API (3:48)
Creating EF migrations and applying them (4:19)
Seeding initial data (1:44)
Adding Middleware - Global exception handler (2:29)
Demo: Presentation layer & API (1:58)
Chapter recap (0:37)
06: Authentication
Introduction (1:19)
Keycloak identity provider setup (2:06)
Keycloak admin panel overview (1:22)
Demo: Obtaining JWTs using Keycloak (1:39)
Configuring authentication middleware & services (1:57)
Configuring JWT authentication options (2:08)
Demo: Authentication in action (0:42)
Implementing the user registration feature (2:56)
Adding an API endpoint for registering a user (1:21)
Implementing the authentication service (3:01)
Configuring the authentication service as a typed HTTP client (1:49)
Demo: User registration with Keycloak (0:47)
Implementing the user login feature (3:05)
Demo: User login with Keycloak (0:43)
Chapter recap (0:23)
07: Authorization
Introduction (0:37)
Implementing Role-based Authorization (17:46)
Implementing Permission-based Authorization (15:14)
Implementing Resource-based Authorization (6:17)
Chapter recap (0:31)
08: Advanced Topics
Introduction (0:37)
Structured Logging with Serilog and Seq (17:23)
Distributed Caching with Redis (16:33)
Health Checks in Clean Architecture (8:36)
Implementing API Versioning (12:02)
Transactional Outbox Pattern (20:22)
Minimal APIs (9:48)
Chapter recap (0:36)
09: Testing
Introduction (1:02)
Domain Layer Unit Testing (15:36)
Application Layer Unit Testing (16:44)
Integration Testing (18:45)
Functional Testing (13:21)
Architecture Testing (8:39)
Chapter recap (0:45)
Wrapping Up: A Small Ask
One Small Ask From Me (1:29)
Bonus Content
Source Code with Extra Features
Source Code with EF Core instead of Dapper [NEW]
Clean Architecture Template
Code Quality Shortcut
CI/CD Blueprint
Postman Collections
PCA Slides
Advanced Topics [OLD]
Introduction (0:32)
Strongly Typed IDs (7:59)
Minimal APIs (8:50)
Transactional Outbox Pattern (12:44)
Chapter recap (0:22)
Testing [OLD]
Introduction (1:01)
Unit testing in Clean Architecture (2:22)
Architecture tests (3:01)
Chapter recap (0:22)
What you will learn in this course
Complete and Continue