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
- Level
- All levels
- Language
- English
- Updated
- 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 |
Get instant access to all 90 lessons in this course, plus thousands of other premium courses. One subscription, unlimited knowledge.
Learn more about subscriptionBooks
What courses are similar to Pragmatic Clean Architecture?
-
Updated 2y agoEntity Framework Core - The Complete Guide (.NET Core 5)
By: UdemyEntity Framework is a term that goes hand by hand with ASP.NET Core. It is one of that technology that is used very often and is not understood most of the.5h 24m -
Updated 1y agoPragmatic REST APIs
By: Milan JovanovićLearn how to create production-ready REST APIs using the latest features of ASP.NET Core and best practices.14h 44m5/5 -
Updated 2y agoC# Advanced Topics: Take Your C# Skills to the Next Level
By: UdemyChances are you're familiar with the basics of C# and are hungry to learn more. Or you've been out of touch with C# for a while and are looking for a quick.3h 7m
More courses by Milan Jovanović
-
Updated 1y agoPragmatic REST APIs
Learn how to create production-ready REST APIs using the latest features of ASP.NET Core and best practices.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