This comprehensive course will teach you the system I use to ship production-ready applications using Clean Architecture. Learn how to apply the best practices of modern software architecture. Join 2,600+ other students to accelerate your growth as a software architect.
Pragmatic Clean Architecture
Pragmatic Clean Architecture is a 91-lesson 6 hours 21 minutes self-paced course by Milan Jovanović. This comprehensive course will teach you the system I use to ship production-ready applications using Clean Architecture.
Course facts
- Lessons
- 91
- Duration
- 6 hours 21 minutes
- Language
- English
- Added to CourseFlix
- April 2024
- Instructor
- Milan Jovanović
- Price
- Premium
Clean Architecture Deep-Dive
- Learn the architectural principles to make better decisions
- How to design applications that stand the test of time
- Where should you use Clean Architecture
Build a Rich Domain Layer with DDD
- A practical guide to using Domain-Driven Design
- Learn the most important DDD tactical patterns
- Best practices for designing a rich domain model
Clean Application Layer use cases
- Learn how to implement clean use cases with CQRS
- Solve cros-cutting concerns with ease
- How to achieve blazing query speed
Powerful Infrastructure Layer
- How to implement a blazing fast persistence layer
- Get the most from advanced EF Core features
- Learn how to solve concurrency issues
Elegant Presentation Layer
- How to set up dependency injection the right way
- Configuration management and documentation
- Adding API and endpoints efficiently
Bulletproof Authentication
- Implement robust JWT authentication to secure your API
- Learn how to integrate an external identity provider
- How to apply modern security best practices
Robust Authorization NEW
- Learn how to implement custom authorization policies
- Role-based and permission-based authorization
- Why you need resource-based authorization
Production-Ready Advanced Features NEW
- Structured logging, health checks, API versioning
- Improve scalability with background jobs
- Distributed caching with Redis
High-Quality Testing NEW
- Learn how to test complex systems the right way
- Unit testing, Integration testing, Functional (E2E) testing
- Enforce your software architecture with architecture tests
After Completing This Course You Will
- Confidently use Clean Architecture to build amazing projects at your work
- Build a rich domain model with Domain-Driven Design fundamentals
- Set up production-ready applications with industry best practices
- Understand the most important architectural principles
Who teaches Pragmatic Clean Architecture? Milan Jovanović
Milan Jovanović is a Serbian software engineer and Microsoft MVP focused on the architectural side of .NET development — particularly Clean Architecture, Modular Monoliths, and the patterns for building maintainable production .NET applications. He runs the Milan Jovanović Tech newsletter — one of the more widely-read newsletters in the .NET community — and publishes paid course material on the same topics.
His CourseFlix listing carries three Milan Jovanović courses: Pragmatic Clean Architecture, Modular Monolith Architecture, and Pragmatic REST APIs. The teaching style is unusually rigorous for the .NET tutorial market about architectural decisions — each course is essentially a senior engineer's playbook on a specific architectural pattern.
Material is paid and aimed at intermediate-and-up .NET developers responsible for architectural decisions on real production systems. For broader content, see CourseFlix's C# and System Design & Architecture category pages.
What lessons are included in Pragmatic Clean Architecture?
| # | Lesson Title | Duration | Access |
|---|---|---|---|
| 1 | Welcome Demo | 00:44 | |
| 2 | What you will learn in this course | 01:03 | |
| 3 | Who this course is for | 00:55 | |
| 4 | What are the prerequisites for taking this course | 01:07 | |
| 5 | Architectural principles & Design principles | 06:12 | |
| 6 | Clean Architecture layers | 03:07 | |
| 7 | What we are building & why | 01:49 | |
| 8 | Chapter recap | 00:36 | |
| 9 | Introduction | 02:01 | |
| 10 | Creating the Domain project | 01:05 | |
| 11 | Defining our first domain entity | 04:03 | |
| 12 | What is an Entity in Domain-Driven Design? | 02:39 | |
| 13 | Introducing Value Objects for solving primitive obsession | 08:24 | |
| 14 | The importance of private setters in the domain model and encapsulation | 00:25 | |
| 15 | Using the Static Factory pattern in the domain | 03:12 | |
| 16 | Introducing the Domain Events pattern to the solution | 03:09 | |
| 17 | Adding Repositories and the Unit of Work to the domain | 01:54 | |
| 18 | Creating the Booking entity | 03:32 | |
| 19 | Implementing a Domain service | 03:58 | |
| 20 | Using Double Dispatch for a better domain model | 01:21 | |
| 21 | Introducing the Result class to the project | 03:17 | |
| 22 | Defining a dictionary of domain errors | 01:19 | |
| 23 | Chapter recap | 00:27 | |
| 24 | Introduction | 05:09 | |
| 25 | Creating the Application project | 00:24 | |
| 26 | Configuring dependency injection and installing MediatR | 02:32 | |
| 27 | Adding the required abstractions for CQRS | 03:40 | |
| 28 | Implementing Commands with the rich domain model & repositories | 08:47 | |
| 29 | Defining a domain event handler | 04:26 | |
| 30 | Implementing Queries with Dapper for blazing performance | 09:50 | |
| 31 | Solving logging as a cross-cutting concern | 03:49 | |
| 32 | Creating a Validation pipeline for commands | 05:47 | |
| 33 | Chapter recap | 00:38 | |
| 34 | Introduction | 01:02 | |
| 35 | Creating the Infrastructure project | 00:22 | |
| 36 | Configuring infrastructure services with dependency injection | 03:07 | |
| 37 | Adding Entity Framework Core to the solution | 01:25 | |
| 38 | Configuring Entity Framework Core with dependency injection | 01:38 | |
| 39 | Creating the Domain entity configurations | 03:35 | |
| 40 | Automatically applying entity configurations | 00:46 | |
| 41 | Implementing repository interfaces using a generic repository | 03:00 | |
| 42 | Implementing the SQL connection factory | 01:52 | |
| 43 | Publishing domain events inside the Unit of Work | 04:18 | |
| 44 | Solving race conditions with optimistic concurrency | 04:42 | |
| 45 | Chapter recap | 00:28 | |
| 46 | Introduction | 01:06 | |
| 47 | Creating the Presentation project | 02:40 | |
| 48 | Configuring services with dependency injection | 00:53 | |
| 49 | Adding Controllers and endpoints | 05:34 | |
| 50 | Setting up Docker Compose and running the API | 03:49 | |
| 51 | Creating EF migrations and applying them | 04:20 | |
| 52 | Seeding initial data | 01:45 | |
| 53 | Adding Middleware - Global exception handler | 02:30 | |
| 54 | Demo: Presentation layer & API | 01:59 | |
| 55 | Chapter recap | 00:38 | |
| 56 | Introduction | 01:20 | |
| 57 | Keycloak identity provider setup | 02:07 | |
| 58 | Keycloak admin panel overview | 01:23 | |
| 59 | Demo: Obtaining JWTs using Keycloak | 01:40 | |
| 60 | Configuring authentication middleware & services | 01:58 | |
| 61 | Configuring JWT authentication options | 02:09 | |
| 62 | Demo: Authentication in action | 00:43 | |
| 63 | Implementing the user registration feature | 02:57 | |
| 64 | Adding an API endpoint for registering a user | 01:22 | |
| 65 | Implementing the authentication service | 03:02 | |
| 66 | Configuring the authentication service as a typed HTTP client | 01:50 | |
| 67 | Demo: User registration with Keycloak | 00:48 | |
| 68 | Implementing the user login feature | 03:06 | |
| 69 | Demo: User login with Keycloak | 00:44 | |
| 70 | Chapter recap | 00:24 | |
| 71 | Introduction | 00:38 | |
| 72 | Implementing Role-based Authorization | 17:47 | |
| 73 | Implementing Permission-based Authorization | 15:15 | |
| 74 | Implementing Resource-based Authorization | 06:18 | |
| 75 | Chapter recap | 00:32 | |
| 76 | Introduction | 00:38 | |
| 77 | Structured Logging with Serilog and Seq | 17:24 | |
| 78 | Distributed Caching with Redis | 16:34 | |
| 79 | Health Checks in Clean Architecture | 08:37 | |
| 80 | Implementing API Versioning | 12:03 | |
| 81 | Transactional Outbox Pattern | 20:23 | |
| 82 | Minimal APIs | 09:49 | |
| 83 | Chapter recap | 00:37 | |
| 84 | Introduction | 01:03 | |
| 85 | Domain Layer Unit Testing | 15:37 | |
| 86 | Application Layer Unit Testing | 16:45 | |
| 87 | Integration Testing | 18:46 | |
| 88 | Functional Testing | 13:22 | |
| 89 | Architecture Testing | 08:40 | |
| 90 | Chapter recap | 00:46 | |
| 91 | One Small Ask From Me | 01:30 |
One payment unlocks this course and every other premium course. No auto-renew.
See plansBooks
Read Book Pragmatic Clean Architecture
| # | Title | Type | Open |
|---|---|---|---|
| 1 | Pragmatic Clean Architecture | — | Unlock |
What courses are similar to Pragmatic Clean Architecture?
Updated 3y agoComplete C# Unity Developer 2D: Learn to Code Making Games
By: Udemy, GameDev.tvThe course has been remastered in Unity 2018! This course started as a runaway success on Kickstarter and has gone on to become the most popular and most watche18h 17m
Updated 7mo agoC#/.NET Interview Mastery: Hands-On Edition (2026)
By: Code MazeA structured course for preparing for technical interviews in C# and .NET, covering key topics from syntax to architectural patterns.
Updated 1mo agoFoundation in C#: Object Oriented Programming Part 2
By: Tim CoreyDeepen your C# OOP skills: method overriding and overloading, events and delegates, generics, and abstract classes with practical examples.7h 24m
Updated 2y agoBuild a Microservices app with .Net and NextJS from scratch
By: UdemyMicroservices is the latest 'buzzword' and hot topic in the web development industry at the moment and nowadays having microservices as part of your skillset.31h 42m
More courses by Milan Jovanović
Updated 1mo agoPragmatic REST APIs
Build a production-ready ASP.NET Core REST API from scratch, covering authentication, testing, docs, and Azure deployment.14h 44m5/5
Updated 2y agoModular Monolith Architecture
This in-depth course will transform the way you build modern systems. You will learn the best practices for applying the Modular Monolith architecture in a.12h 48m5/5