09-03-2024, 08:08 AM
.Net Backend Bootcamp: Modulith, Vsa, Ddd, Cqrs And Outbox
Published 8/2024
MP4 | Video: h264, 1920x1080 | Audio: AAC, 44.1 KHz
Language: English | Size: 10.33 GB | Duration: 20h 12m
Develop EShop Modulith on .NET used Asp.Net Web API, PostgreSQL, Redis, RabbitMQ, Keycloak, Seq, Docker, MassTransit
[b]What you'll learn[/b]
Modular Monoliths (Modulith) Architecture
Vertical Slice Architecture (VSA)
Domain-Driven Design (DDD)
Command Query Responsibility Segregation (CQRS)
Outbox Pattern for Reliable Messaging
CQRS (Command Query Responsibility Segregation) and Vertical Slice architectures for module development
Communicate over In-process method calls-public APIs and use RabbitMQ for event-driven communication
Secure APIs with Keycloak, using OpenID Connect and Bearer Tokens
ASPNET Core Minimal APIs and latest features of .Net8 and C# 12
Vertical Slice Architecture implementation with Feature folders
DDD, CQRS Patterns using MediatR library w/ following Best Practices
Use Domain Events & Integration Events when UpdatePriceChanged event
Use Entity Framework Core Code-First Approach and Migrations on PostgreSQL Database
Cross-cutting Concerns including Logging with Serilog, Validation with MediatR Pipeline Behaviors, Exceptions, Pagination
Using Redis as a Distributed Cache over PostgreSQL database
Develop Proxy, Decorator and Cache-aside patterns
Sync Communications between Catalog and Basket Modules w/ In-process Method Calls (Public APIs)
Async Communications between Modules w/ RabbitMQ & MassTransit
Develop User Identity Module with Keycloak Authentication
OAuth2 + OpenID Connect Flows with Keycloak
Outbox Pattern For Reliable Messaging w/ BasketCheckout Use Case
Publish BasketCheckoutEvent to RabbitMQ via MassTransit library, Consume from Ordering Module
Migrating to Microservices: EShop Modules to Microservices w/ Stranger Fig Pattern
[b]Requirements[/b]
Basics of C# and programming
[b]Description[/b]
In this bootcamp, you'll learn how to build robust, scalable, and maintainable applications using cutting-edge technologies and architectural patterns.We will develop;Modular Monoliths (Modulith) ArchitectureVertical Slice Architecture (VSA)Domain-Driven Design (DDD)Command Query Responsibility Segregation (CQRS)Outbox Pattern for Reliable MessagingWe start with the basics and progressively dive deeper into each topic. You'll get hands-on experience building a complete EShop Modular Monolith application, implementing features like CQRS and the Outbox pattern.We'll follow CQRS (Command Query Responsibility Segregation) and Vertical Slice architectures for module development.Modules will communicate over In-process method calls-public APIs and use RabbitMQ for event-driven communication.We'll secure our APIs with Keycloak, using OpenID Connect and Bearer Tokens.We'll implement the Outbox Pattern for reliable messaging between modules.Along with this you'll develop following modules and items:Catalog module which;Using Asp.Net Core Minimal APIs and latest features of .Net8 and C# 12Develop Vertical Slice Architecture implementation with Feature folders Develop DDD, CQRS Patterns using MediatR library w/ following Best Practices Use Domain Events & Integration Events when UpdatePriceChanged eventUse Entity Framework Core Code-First Approach and Migrations on PostgreSQL DatabaseUse Carter for expose Minimal Api endpointsCross-cutting Concerns including Logging with Serilog, Validation with MediatR Pipeline Behaviors, Exceptions, PaginationBasket module which includes;Similar to Catalog Module; Develop DDD, CQRS, Vertical Slice Architecture implementationAdditionally;Using Redis as a Distributed Cache over PostgreSQL database Develop and Implements Proxy, Decorator and Cache-aside patternsPublish BasketCheckoutEvent to RabbitMQ via MassTransit libraryImplement Outbox Pattern For Reliable Messaging w/ BasketCheckout Use CaseModule Communications;Sync Communications between Catalog and Basket Modules with In-process Method Calls (Public APIs)Async Communications between Modules w/ RabbitMQ & MassTransit for UpdatePrice Between Catalog-Basket ModulesIdentity Module which includes; Develop User Identity Module with Keycloak AuthenticationOAuth2 + OpenID Connect Flows with KeycloakSetup Keycloak into Docker-compose file for Identity Provider as a Backing ServiceSecure EShop Modules with Keycloak OpenId Connect in AspNetJwtBearer token for OpenID Connect with Keycloak Identity Ordering Module which includes;Similar to the Catalog and Basket Module; Develop DDD, CQRS, Vertical Slice Architecture implementationImplement Outbox Pattern For Reliable Messaging w/ BasketCheckout Use CaseLastly, we will discussMigrating to Microservices: EShop Modules to Microservices w/ Stranger Fig PatternThis course is more than just learning .NET, it's a deep dive into the world of Modular Monoliths with Vertical-Slice Architecture, Domain-Driven Design (DDD), CQRS, and advanced architectural patterns for Backend Development.
Overview
Section 1: Introduction
Lecture 1 Introduction
Lecture 2 Prerequisites, Source Code and Course Slides
Lecture 3 Run the Final Application
Lecture 4 Project Code Structure
Lecture 5 Modular Monoliths Architectures, Patterns, Libraries and Best Practices
Lecture 6 How to Follow the Course (The Course Flow and Way of Learning)
Section 2: Monolithic Architecture - What's wrong with Traditional Monoliths ?
Lecture 7 What is Traditional Monoliths (Monolithic Architecture) ?
Lecture 8 When to use Monolithic Architecture
Lecture 9 What's wrong with Traditional Monolithic Architecture ?
Lecture 10 Technology Lock-In and Fear Cycle in Traditional Monolithic Architecture
Lecture 11 Big Ball of Mud
Section 3: Microservices Architectures - Why it is not fit projects ?
Lecture 12 What are Microservices and Microservices Architecture ?
Lecture 13 When to Use Microservices Architecture
Lecture 14 What's wrong with Microservices Architecture ?
Lecture 15 Fallacies of Distributed Computing
Lecture 16 Microservices Antipattern: The Distributed Monolith
Lecture 17 Amazon Case: Rearchitecting from a Distributed Microservices to a Monolith
Section 4: The Bridge: Modular Monolith Architectures - Gateway between Monolithic and MS
Lecture 18 What is Modular Monolithic (Modulith) Architecture ?
Lecture 19 Why Modular Monoliths ? Advantages over Microservices ?
Lecture 20 Monolith First Approaches from Martin Fowler and Sam Newman
Lecture 21 Starting Point for Microservices: Gradually Transition with Incremental Refactor
Lecture 22 Compare of Monolith, Microservices, Modular Monolith: Communications and Data
Lecture 23 Compare of Monolith, Microservices, Modular Monolith: Development and Deployment
Lecture 24 Shopify Modular Monolithic Architecture
Lecture 25 Decomposition of EShop Modules: Catalog, Basket, Identity and Ordering Modules
Section 5: Create EShop Modular Monolith Project Solution Structure
Lecture 26 Introduction - Create EShop Modular Monolith Project Solution Structure
Lecture 27 Create GitHub Repository for EShop Modular Monolithic Architecture
Lecture 28 Create New Blank Solution: eshop-modular-monoliths
Lecture 29 Modular Monolith Folder Structure: Bootstrapper, Modules, Shared
Lecture 30 Create Bootstrapper Api Project
Lecture 31 Configure Empty Web Project to Bootstrapper Api of Modular Monolith
Lecture 32 Create Modules Folders according to DDD Bounded Context Analysis
Lecture 33 External vs Internal Architecture of Modular Monoliths Architecture
Lecture 34 Vertical Slice Architecture
Lecture 35 Clean Architecture
Lecture 36 Vertical Slice versus Clean Architecture
Lecture 37 Create Module Projects as a Class Library
Lecture 38 Shared Kernel Pattern in DDD
Lecture 39 Created Shared Kernel Class Library Project for All Modules
Lecture 40 Shared Project Dependencies to Modules Projects
Lecture 41 Module Dependencies to Bootstrapper Asp.Net Api Project
Section 6: Wire-up Dependencies Between Modules (DI Management of Modules)
Lecture 42 Introduction - Wire-up Dependencies Between Modules (DI Management of Modules)
Lecture 43 Asp.net Dependency Injection Management and Program.cs
Lecture 44 Wiring up dependencies between modules
Lecture 45 Develop AddCatalogModule extention method in CatalogModule.cs
Lecture 46 Registering Catalog Dependencies into Program.cs
Lecture 47 Develop AddBasketModule, AddOrderingModule extention methods
Lecture 48 Registering Basket and Ordering Dependencies into Program.cs
Lecture 49 Asp.net Middlewares and Http Request Pipeline
Lecture 50 Configure Http Request Pipelines for Modules in Program.cs
Lecture 51 Examine WebApplication Class Use Abstractions and Install Required Packages
Lecture 52 Develop UseCatalogModule extention method for Module Configure the HTTP request
Lecture 53 Integrating UseCatalogModule in Program.cs
Lecture 54 Develop UseBasketModule and UseOrderingModule extention method for Module Config
Lecture 55 Integrating UseBasketModule and UseOrderingModule extention method in Program.cs
Lecture 56 Add GlobalUsings.cs for Each Project to Avoid Redundant Using Statements
Section 7: First Module: Catalog Module with Vertical Slice Architecture and CQRS
Lecture 57 Introduction - First Module: Catalog Module with Vertical Slice Architecture
Lecture 58 Domain Analysis of Catalog Module: Models, UCs, Rest Apis, Databases
Lecture 59 Technical Analysis of Catalog Module: Architectures, Patterns, Libraries, Folder
Lecture 60 Way of Development: Shared -> Modules -> API
Section 8: Develop Shared Domain for Tactical DDD Abstraction (Entity, Aggreagate, Events)
Lecture 61 Introduction - Develop Shared Domain for Tactical DDD Abstraction
Lecture 62 Domain Driven Design - DDD
Lecture 63 Tactical Domain-Driven Design: Entities, Value Objects, Aggregates, A. Rooots
Lecture 64 Develop DDD Abstractions (Entity, Aggregate, DomainEvent) in Shared Library
Lecture 65 Develop IDomainEvent interface in Tactical DDD Abstraction using MediatR
Lecture 66 Develop Aggregate classes in Tactical DDD Abstraction
Section 9: Develop Catalog Domain with Product Domain Entity Models
Lecture 67 Introduction - Develop Catalog Domain with Product Domain Entity Models
Lecture 68 Develop Product Domain Entity Models in Catalog Module Domain Models
Lecture 69 Anemic-domain vs Rich-domain Model Entities Entities in DDD
Lecture 70 Develop DDD Rich-domain model Entity for Product Entity
Lecture 71 Domain Events in DDD and Domain vs Integration Events
Lecture 72 Develop Product Created and Updated Domain Event in Catalog Module
Lecture 73 Raise ProductCreated and ProductPriceChanged Domain Event in Catalog Module
Section 10: Data Management of Modular Monolith: Setup Postgres as a Main Database
Lecture 74 Introduction - Data Management of Modular Monolith: Setup Postgres DB
Lecture 75 Data Management of Modular Monoliths: 4 Data Isolation Strategies
Lecture 76 Best Practice: DB Schema separation of Modules in Modular Monoliths apps
Lecture 77 Multi-context EF DB Context object for DB Separate Schema for Data Isolation
Lecture 78 Backing Services for Cloud-Native Architectures
Lecture 79 EShop Modular Monolith Deployment Strategy
Lecture 80 Setup PostgreSQL DB using Docker-compose file for Multi-container Docker env
Lecture 81 Add PostgreSQL DB image into Docker-compose file for Multi-container Docker env
Lecture 82 Run Docker-Compose on Visual Studio to setup PostgreSQL DB on Docker
Lecture 83 Connect and Browse PostgreSQL DB using pgAdmin
Section 11: Develop Shared and Catalog Data-Infrastructure with EF Core Code First
Lecture 84 Introduction - Develop Shared and Catalog Data-Infrastructure Layer with EF Core
Lecture 85 EF Core 8 Features, Code First Approach, Migrations and PostgreSQL Connection
Lecture 86 Steps of EF Core Developments for Shared and Catalog Data-Infrastructure
Lecture 87 Install EF Core Nuget Packages in Shared Library
Lecture 88 Develop EF Core DBContext Object for Storing Entities in Catalog Module
Lecture 89 Mapping DDD Objects to EF Entities - Develop EF Core Entity Configurations
Lecture 90 EF Core PostgreSQL Connection String in appsettings.json file
Lecture 91 Register EF Core DbContext in Asp.Net DependencyInjection Tool for PostgreSQL
Lecture 92 Create EF Core Migrations for CatalogDbContext - Part 1
Lecture 93 Create EF Core Migrations for CatalogDbContext - Part 2
Lecture 94 Review and Run Docker-Compose on Visual Studio to setup PostgreSQL DB on Docker
Lecture 95 Apply EF Core Migrations to PostgreSQL DB with Update-Database Command
Lecture 96 Auto Migrate EF Core Entities to PostgreSQL DB when Application Startup
Lecture 97 Develop Generic UseMigration extention method for DB Migration and Seed
Lecture 98 Using UseMigration extention method on Module DependencyInjection classes
Lecture 99 Test Auto-Migrations with UseMigration extention method on WebApplication
Lecture 100 Seed EShopDb Product Data When Application Startup Just After UseMigration
Lecture 101 Run Catalog Module to Migrate and Seed EShopDb with UseMigration method
Lecture 102 EF Core Interceptors: SaveChangesInterceptor for Auditing Entities
Lecture 103 Develop SaveChangesInterceptor to Auditing Entities for Order Entities
Lecture 104 Run&Test Catalog Module for Audit with EF Save Changes Interceptor
Lecture 105 Dispatch Domain Events w/ EF Core SaveChangesInterceptor
Lecture 106 Develop DispatchDomainEventsInterceptor to Trigger Domain Event Handlers
Lecture 107 Run&Test Catalog Module for Dispatch DomainEvents w/ EF SaveChanges Interceptor
Section 12: Application Use Case Development with CQRS and MediatR
Lecture 108 Introduction - Application Use Case development with CQRS and MediatR
Lecture 109 CQRS (Command Query Responsibility Segregation) Pattern
Lecture 110 Logical and Physical Implementation of CQRS Pattern
Lecture 111 CQRS Design Pattern With MediatR Library (Logical CQRS Implementation)
Lecture 112 Develop Feature Handler class with CQRS and MediatR
Lecture 113 Create Abstraction on MediatR for CQRS - Command and Query Separation
Lecture 114 Create Abstraction on MediatR for CQRS - Command and Query Separation - 2
Section 13: Catalog Application Use Case Development with CQRS and MediatR
Lecture 115 Introduction - Catalog Application Use Case Development with CQRS and MediatR
Lecture 116 Quick Remember Catalog Module Application Use Cases Analysis
Lecture 117 Develop Catalog Module Folder Structure for CQRS
Lecture 118 Develop Dto Classes for Product in Catalog Module
Lecture 119 Develop Products CreateProductCommand and Handler in Catalog Modules Application
Lecture 120 Develop Products CreateProductCommandHandler using CatalogDbContext in Catalog
Lecture 121 Develop Products UpdateProductCommand and Handler using CatalogDbContext
Lecture 122 Develop Products DeleteProductCommand and Handler using CatalogDbContext
Lecture 123 Develop Product Queries with CQRS and MediatR in Catalog Module
Lecture 124 Mapping with Mapster
Lecture 125 Develop Product Queries with CQRS and MediatR in Catalog Module w/ Mapster
Lecture 126 Develop GetProductByCategory Queries with CQRS and MediatR in Catalog Module
Lecture 127 Develop GetProductById Queries with CQRS and MediatR in Catalog Module
Lecture 128 Develop Domain Event Handlers with MediatR INotificationHandler in Catalog
Lecture 129 Develop Domain Event Handlers with MediatR INotificationHandler - Part 2
Section 14: Develop Catalog API Endpoints Expose Minimal Api Endpoints with Carter and REPR
Lecture 130 Introduction - Develop Catalog API Endpoints Exposing Minimal Api Endpoints
Lecture 131 REPR Design Pattern and CQRS MediatR Request LifeCycle
Lecture 132 Minimal Apis and Install Carter Library to Expose Minimal Apis
Lecture 133 Quick Remember Catalog Module Endpoints Analysis
Lecture 134 Develop CreateProduct POST Endpoint with Carter implements ICarterModule
Lecture 135 Develop CreateProduct POST Endpoint with Carter implements ICarterModule- Part 2
Lecture 136 Developing UpdateProduct Endpoint for REST APIs in Catalog Module
Lecture 137 Developing DeleteProduct Endpoint for REST APIs in Catalog Module
Lecture 138 Developing GetProducts Endpoint for REST APIs in Catalog Module
Lecture 139 Developing GetProductById Endpoint for REST APIs in Catalog Module
Lecture 140 Developing GetProductByCategory Endpoint for REST APIs in Catalog Module
Lecture 141 Register Carter libraries into Asp.Net Dependency Injection Service and Request
Lecture 142 Create Extention Method for Carter Assembly Registrations
Lecture 143 Create Postman Collection for EShopModules
Lecture 144 Test Catalog Module - CreateProduct POST Request - Debug Carter Minimal API
Lecture 145 Test UpdateProduct Endpoint with CQRS and VSA in Catalog Module
Lecture 146 Test Get Product Endpoints with CQRS and VSA in Catalog Module
Lecture 147 Test DeleteProduct Endpoint with CQRS and VSA in Catalog Module
Section 15: Develop Cross-cutting Concerns for Catalog and Each Module in EShop Modules
Lecture 148 Introduction - Develop Cross-cutting Concerns for Catalog and Each Module
Lecture 149 MediatR Pipeline Behaviours and Fluent Validation Library
Lecture 150 Add Cross-cutting Concerns into Shared Class Library to use in all modules
Lecture 151 Apply Validation with AbstractValidator using Fluent Validation Library
Lecture 152 Apply Validation with AbstractValidator using Fluent Validation Library - Part 2
Lecture 153 Validation Pipeline Behaviour with MediatR using Fluent Validation Library
Lecture 154 Remove Manual Validator and Test Validation Pipeline Behaviour with MediatR usin
Lecture 155 Develop CRUD Command Validators with Fluent Validation
Lecture 156 Global Handling Exceptions in ASP.NET Core with app.UseExceptionHandler
Lecture 157 Shared Handle Exceptions Generic Way in ASP.NET Core w/ app.UseExceptionHandler
Lecture 158 Global Exception Handling with IExceptionHandler interface in Asp.Net Core
Lecture 159 Register Custom Exception Handling into Asp.net with AddExceptionHandler method
Lecture 160 Logging Behavior in MediatR Pipeline for Cross-cutting concerns
Lecture 161 Test Logging Behaviour for all MediatR Requests on Catalog Module
Lecture 162 Structured Logging Using Serilog in .NET 8.0 Minimal APIs
Lecture 163 Serilog WriteTo Seq for Structured Logging in .NET
Lecture 164 Develop Pagination Class for Query GetProducts using CQRS and MediatR
Lecture 165 Develop GetProducts Query apply Pagination using CQRS and MediatR
Section 16: Develop Basket Module with Vertical Slice Architecture and CQRS
Lecture 166 Introduction - Develop Basket Module with Vertical Slice Architecture and CQRS
Lecture 167 Domain Analysis of Basket Module: Models, UCs, Rest Apis, Databases
Lecture 168 Technical Analysis of Basket Module: Architectures, Patterns, Libraries, Folders
Lecture 169 Develop ShoppingCart Domain Entity Models in Basket Domain Entities
Lecture 170 Develop DDD Rich-domain model Entity for ShoppingCart Entities
Section 17: Develop Basket Data-Infrastructure with EF Core Code First and PostgreSQL
Lecture 171 Introduction - Develop Basket Data-Infrastructure with EF Core Code First
Lecture 172 Steps of Infrastructure EF Core Developments for Basket Module
Lecture 173 Develop EF Core DBContext Object for Storing Entities in Basket Infrastructure
Lecture 174 Mapping DDD Objects to EF Entities - Develop EF Core Entity Configurations
Lecture 175 EF Core 8 Relations and DDD ValueObject Mapping with ComplexType and Property
Lecture 176 Develop SC and SC Items Relations Entity Configurations
Lecture 177 EF Core SQL Server Connection String in appsettings.json file
Lecture 178 Register EF Core DbContext in Asp.Net Dependency Injection Tool for PostgreSQL
Lecture 179 Create EF Core Migrations for BasketDbContext in Basket Infrastructure
Lecture 180 Run Docker-Compose on Visual Studio to setup PostgreSQL on Docker
Lecture 181 Apply EF Core Migrations to PostgreSQL DB with Update-Database Command
Lecture 182 Auto Migrate EF Core Entities to PostgreSQL when Application Startup with Coding
Lecture 183 Test Auto-Migrations with UseMigration Extention Method on WebApplication
Section 18: Develop Basket Application Use Case Development with CQRS and MediatR
Lecture 184 Introduction - Basket Application Use Case Development with CQRS and MediatR
Lecture 185 Develop Basket Folder Structure for CQRS
Lecture 186 Develop Dto Classes for ShoppingCart in Basket Module
Lecture 187 Develop Basket CreateBasketCommand and Handler in Basket Application Use Cases
Lecture 188 Develop Basket CreateBasketCommandHandler using BasketDbContext in Basket Module
Lecture 189 Develop Basket DeleteBasketCommand and Handler using BasketDbContext in Basket
Lecture 190 Develop Basket Queries with CQRS and MediatR in Basket Module
Lecture 191 Develop Basket AddItemIntoBasketHandler with CQRS and MediatR
Lecture 192 Develop Basket RemoveItemFromBasketHandler with CQRS and MediatR
Section 19: Develop Basket API Endpoints Exposing Minimal Api Endpoints with Carter and REPR
Lecture 193 Introduction - Develop Basket API Endpoints Exposing Minimal Api Endpoints
Lecture 194 Develop CreateBasket POST Endpoint with Carter implements ICarterModule
Lecture 195 Develop DeleteBasket Endpoint with Carter implements ICarterModule
Lecture 196 Develop GetBasket Endpoint with Carter implements ICarterModule for Minimal Apis
Lecture 197 Develop AddItemIntoBasket Endpoint with Carter implements ICarterModule
Lecture 198 Develop RemoveItemFromBasket Endpoint with Carter implements ICarterModule
Lecture 199 Register MediatR and Carter libraries into Asp.Net Dependency Injection Service
Lecture 200 Register MediatR libraries into Asp.Net Dependency Injection Service and Request
Lecture 201 Develop MediatR Extention Method for Custom Registration With Assemblies
Lecture 202 Test Basket API - CreateBasket POST Request - Debug Carter Minimal API
Lecture 203 Test Get Basket Endpoints with CQRS and VSA in Basket Module
Lecture 204 Test DeleteBasket Endpoint with CQRS and VSA in Basket Module
Lecture 205 Test AddItemIntoBasket Endpoint with CQRS and VSA in Basket Module
Lecture 206 Test RemoveItemFromBasket Endpoint with CQRS and VSA in Basket Module
Section 20: Develop Distributed Caching with Redis in Basket Module
Lecture 207 Introduction - Develop Distributed Caching with Redis in Basket Module
Lecture 208 Develop BasketRepository Class using EF Core DbContext object
Lecture 209 Implement IBasketRepository Class using EF Core DbContext object
Lecture 210 Register IBasketRepository into DI of Basket Module
Lecture 211 Inject and Use IBasketRepository into Handler classes in Basket Module
Lecture 212 Inject and Use IBasketRepository into AddItem and RemoveItem Handler classes
Lecture 213 Quick Test Basket Endpoint with CQRS and VSA in Basket Module
Lecture 214 Cache-aside Pattern and Cache Invalidation
Lecture 215 Proxy Pattern, Decorator Pattern and Scrutor Library
Lecture 216 Develop CachedBasketRepository with Proxy Pattern, Decorator Pattern and Scrutor
Lecture 217 Develop CachedBasketRepository with Proxy Pattern, Decorator Pattern - Part 2
Lecture 218 Develop CachedBasketRepository with Proxy Pattern, Decorator Pattern - Part 3
Lecture 219 Register Decorated CachedBasketRepository and StackExchangeRedis with Scrutor
Lecture 220 Register StackExchangeRedis into Common DI in Api Project Program.cs
Lecture 221 Setup Redis as a Distributed Cache using Docker-compose file for Multi-container
Lecture 222 Run Docker-Compose on Visual Studio to setup Redis Distributed Cache on Docker
Lecture 223 Connect Redis Cache from Local Basket Module and send GET request Basket Cache
Lecture 224 Develop Custom JsonConverter for ShoppingCart and Items When Reading to Redis
Lecture 225 Develop Custom JsonConverter for ShoppingCart and Items - Part 2
Lecture 226 Use Custom JsonSerializerOptions with JsonConverter for ShoppingCart and Items
Lecture 227 Quick Test Basket Endpoint with CachedBasket Repository and Custom JsonConverter
Section 21: Sync Communications between Modules with In-process Method Calls (Public APIs)
Lecture 228 Introduction - Sync Communications between Modules with In-process Method Calls
Lecture 229 How Modular Monolithic Architecture Handle Communications Between Modules
Lecture 230 Basket Module Synchronous Use Cases - Adding an Item to the Basket Communication
Lecture 231 Examine AddItemIntoBasketHandler Class: Get Product Price from Catalog Module
Lecture 232 Sync Communication Between Modules Using Contracts Class Libraries
Lecture 233 Step 1: Create Catalog.Contracts Class Library
Lecture 234 Step 2: Move exposing MediatR method Query or Commands into Catalog.Contracts
Lecture 235 Spliting CQRS Contract related common operations into Shared.Contracts Class lib
Lecture 236 Step 3: Modify Catalog Module getting reference from Catalog.Contracts Class Lib
Lecture 237 Step 4: Basket Get Reference from Catalog.Contracts Class Library
Lecture 238 Step 6: Get Product entity values into AddItemIntoBasketHandler and set Price
Lecture 239 Test Basket AddItemIntoBasket Sync Call to Catalog Module to Get Product Data
Lecture 240 Step 7: Migrating Microservices: Evolving Contracts Sync Communication
Section 22: Async Communications between Modules w/ RabbitMQ & MassTransit for UpdatePrice
Lecture 241 Introduction - Async Communications between Modules w/ RabbitMQ & MassTransit
Lecture 242 How Modular Monolithic Architecture Handle Async Communications Between Modules
Lecture 243 Fan-Out Publish/Subscribe Messaging Pattern
Lecture 244 Quick Remember: Domain vs Integration Events - Domain leads to Integration Event
Lecture 245 Domain Analysis of Async Communication between Catalog and Basket Modules
Lecture 246 Technical Analysis of Async Communication between Catalog and Basket Modules
Lecture 247 Steps of Developing Async Communication between Catalog and Basket Modules
Lecture 248 Step1: Examine Catalog Module Domain and Integration Events
Lecture 249 Step2: Create Shared.Messaging Class Library
Lecture 250 Develop ProductPriceChangedIntegration Event in Shared.Messaging Class Library
Lecture 251 Develop MassTransit Extention Methods to Register RabbitMQ connection into DI
Lecture 252 Develop MassTransit Extention Methods to Register connection into DI of Catalog
Lecture 253 Add Project Reference to Shared.Messaging in Catalog and Basket Modules
Lecture 254 Register MassTransit Packages into Bootstrapper Api DI in Program.cs file
Lecture 255 ProductPriceChanged Integration Event: How Domain leads to Integration Event
Lecture 256 Step3: Catalog Publish UpdatePrice Integration Event
Lecture 257 Step4: Basket Subscribe and consume ProductPriceChanged Integration Event
Lecture 258 Develop UpdateItemPriceInBasket Feature in Basket Module
Lecture 259 Develop UpdateItemPriceInBasket Feature in Basket Module - Part 2
Lecture 260 Call UpdateItemPriceInBasketCommand in ProductPriceChangedIntegrationEventHander
Lecture 261 TEST - ProductPriceChangedIntegrationEvent w/ In-memory MassTransit
Lecture 262 What is RabbitMQ and Main Components of RabbitMQ (Producer, Queue, Consumer)
Lecture 263 Shifting In-memory Bus to RabbitMQ Message broker in Masstransit
Lecture 264 Develop MassTransit Extention Methods to Register RabbitMQ connection into DI
Lecture 265 Setup RabbitMQ for Async Communication using Docker-compose file
Lecture 266 Run Docker-Compose on Visual Studio to setup RabbitMQ on Docker
Lecture 267 TEST - ProductPriceChangedIntegrationEvent w/ RabbitMQ MassTransit
Beginner .NET Developers who is curious about .NET Backend technologies with Modular Monolith Architectures
[b]What you'll learn[/b]
Modular Monoliths (Modulith) Architecture
Vertical Slice Architecture (VSA)
Domain-Driven Design (DDD)
Command Query Responsibility Segregation (CQRS)
Outbox Pattern for Reliable Messaging
CQRS (Command Query Responsibility Segregation) and Vertical Slice architectures for module development
Communicate over In-process method calls-public APIs and use RabbitMQ for event-driven communication
Secure APIs with Keycloak, using OpenID Connect and Bearer Tokens
ASPNET Core Minimal APIs and latest features of .Net8 and C# 12
Vertical Slice Architecture implementation with Feature folders
DDD, CQRS Patterns using MediatR library w/ following Best Practices
Use Domain Events & Integration Events when UpdatePriceChanged event
Use Entity Framework Core Code-First Approach and Migrations on PostgreSQL Database
Cross-cutting Concerns including Logging with Serilog, Validation with MediatR Pipeline Behaviors, Exceptions, Pagination
Using Redis as a Distributed Cache over PostgreSQL database
Develop Proxy, Decorator and Cache-aside patterns
Sync Communications between Catalog and Basket Modules w/ In-process Method Calls (Public APIs)
Async Communications between Modules w/ RabbitMQ & MassTransit
Develop User Identity Module with Keycloak Authentication
OAuth2 + OpenID Connect Flows with Keycloak
Outbox Pattern For Reliable Messaging w/ BasketCheckout Use Case
Publish BasketCheckoutEvent to RabbitMQ via MassTransit library, Consume from Ordering Module
Migrating to Microservices: EShop Modules to Microservices w/ Stranger Fig Pattern
[b]Requirements[/b]
Basics of C# and programming
[b]Description[/b]
In this bootcamp, you'll learn how to build robust, scalable, and maintainable applications using cutting-edge technologies and architectural patterns.We will develop;Modular Monoliths (Modulith) ArchitectureVertical Slice Architecture (VSA)Domain-Driven Design (DDD)Command Query Responsibility Segregation (CQRS)Outbox Pattern for Reliable MessagingWe start with the basics and progressively dive deeper into each topic. You'll get hands-on experience building a complete EShop Modular Monolith application, implementing features like CQRS and the Outbox pattern.We'll follow CQRS (Command Query Responsibility Segregation) and Vertical Slice architectures for module development.Modules will communicate over In-process method calls-public APIs and use RabbitMQ for event-driven communication.We'll secure our APIs with Keycloak, using OpenID Connect and Bearer Tokens.We'll implement the Outbox Pattern for reliable messaging between modules.Along with this you'll develop following modules and items:Catalog module which;Using Asp.Net Core Minimal APIs and latest features of .Net8 and C# 12Develop Vertical Slice Architecture implementation with Feature folders Develop DDD, CQRS Patterns using MediatR library w/ following Best Practices Use Domain Events & Integration Events when UpdatePriceChanged eventUse Entity Framework Core Code-First Approach and Migrations on PostgreSQL DatabaseUse Carter for expose Minimal Api endpointsCross-cutting Concerns including Logging with Serilog, Validation with MediatR Pipeline Behaviors, Exceptions, PaginationBasket module which includes;Similar to Catalog Module; Develop DDD, CQRS, Vertical Slice Architecture implementationAdditionally;Using Redis as a Distributed Cache over PostgreSQL database Develop and Implements Proxy, Decorator and Cache-aside patternsPublish BasketCheckoutEvent to RabbitMQ via MassTransit libraryImplement Outbox Pattern For Reliable Messaging w/ BasketCheckout Use CaseModule Communications;Sync Communications between Catalog and Basket Modules with In-process Method Calls (Public APIs)Async Communications between Modules w/ RabbitMQ & MassTransit for UpdatePrice Between Catalog-Basket ModulesIdentity Module which includes; Develop User Identity Module with Keycloak AuthenticationOAuth2 + OpenID Connect Flows with KeycloakSetup Keycloak into Docker-compose file for Identity Provider as a Backing ServiceSecure EShop Modules with Keycloak OpenId Connect in AspNetJwtBearer token for OpenID Connect with Keycloak Identity Ordering Module which includes;Similar to the Catalog and Basket Module; Develop DDD, CQRS, Vertical Slice Architecture implementationImplement Outbox Pattern For Reliable Messaging w/ BasketCheckout Use CaseLastly, we will discussMigrating to Microservices: EShop Modules to Microservices w/ Stranger Fig PatternThis course is more than just learning .NET, it's a deep dive into the world of Modular Monoliths with Vertical-Slice Architecture, Domain-Driven Design (DDD), CQRS, and advanced architectural patterns for Backend Development.
Overview
Section 1: Introduction
Lecture 1 Introduction
Lecture 2 Prerequisites, Source Code and Course Slides
Lecture 3 Run the Final Application
Lecture 4 Project Code Structure
Lecture 5 Modular Monoliths Architectures, Patterns, Libraries and Best Practices
Lecture 6 How to Follow the Course (The Course Flow and Way of Learning)
Section 2: Monolithic Architecture - What's wrong with Traditional Monoliths ?
Lecture 7 What is Traditional Monoliths (Monolithic Architecture) ?
Lecture 8 When to use Monolithic Architecture
Lecture 9 What's wrong with Traditional Monolithic Architecture ?
Lecture 10 Technology Lock-In and Fear Cycle in Traditional Monolithic Architecture
Lecture 11 Big Ball of Mud
Section 3: Microservices Architectures - Why it is not fit projects ?
Lecture 12 What are Microservices and Microservices Architecture ?
Lecture 13 When to Use Microservices Architecture
Lecture 14 What's wrong with Microservices Architecture ?
Lecture 15 Fallacies of Distributed Computing
Lecture 16 Microservices Antipattern: The Distributed Monolith
Lecture 17 Amazon Case: Rearchitecting from a Distributed Microservices to a Monolith
Section 4: The Bridge: Modular Monolith Architectures - Gateway between Monolithic and MS
Lecture 18 What is Modular Monolithic (Modulith) Architecture ?
Lecture 19 Why Modular Monoliths ? Advantages over Microservices ?
Lecture 20 Monolith First Approaches from Martin Fowler and Sam Newman
Lecture 21 Starting Point for Microservices: Gradually Transition with Incremental Refactor
Lecture 22 Compare of Monolith, Microservices, Modular Monolith: Communications and Data
Lecture 23 Compare of Monolith, Microservices, Modular Monolith: Development and Deployment
Lecture 24 Shopify Modular Monolithic Architecture
Lecture 25 Decomposition of EShop Modules: Catalog, Basket, Identity and Ordering Modules
Section 5: Create EShop Modular Monolith Project Solution Structure
Lecture 26 Introduction - Create EShop Modular Monolith Project Solution Structure
Lecture 27 Create GitHub Repository for EShop Modular Monolithic Architecture
Lecture 28 Create New Blank Solution: eshop-modular-monoliths
Lecture 29 Modular Monolith Folder Structure: Bootstrapper, Modules, Shared
Lecture 30 Create Bootstrapper Api Project
Lecture 31 Configure Empty Web Project to Bootstrapper Api of Modular Monolith
Lecture 32 Create Modules Folders according to DDD Bounded Context Analysis
Lecture 33 External vs Internal Architecture of Modular Monoliths Architecture
Lecture 34 Vertical Slice Architecture
Lecture 35 Clean Architecture
Lecture 36 Vertical Slice versus Clean Architecture
Lecture 37 Create Module Projects as a Class Library
Lecture 38 Shared Kernel Pattern in DDD
Lecture 39 Created Shared Kernel Class Library Project for All Modules
Lecture 40 Shared Project Dependencies to Modules Projects
Lecture 41 Module Dependencies to Bootstrapper Asp.Net Api Project
Section 6: Wire-up Dependencies Between Modules (DI Management of Modules)
Lecture 42 Introduction - Wire-up Dependencies Between Modules (DI Management of Modules)
Lecture 43 Asp.net Dependency Injection Management and Program.cs
Lecture 44 Wiring up dependencies between modules
Lecture 45 Develop AddCatalogModule extention method in CatalogModule.cs
Lecture 46 Registering Catalog Dependencies into Program.cs
Lecture 47 Develop AddBasketModule, AddOrderingModule extention methods
Lecture 48 Registering Basket and Ordering Dependencies into Program.cs
Lecture 49 Asp.net Middlewares and Http Request Pipeline
Lecture 50 Configure Http Request Pipelines for Modules in Program.cs
Lecture 51 Examine WebApplication Class Use Abstractions and Install Required Packages
Lecture 52 Develop UseCatalogModule extention method for Module Configure the HTTP request
Lecture 53 Integrating UseCatalogModule in Program.cs
Lecture 54 Develop UseBasketModule and UseOrderingModule extention method for Module Config
Lecture 55 Integrating UseBasketModule and UseOrderingModule extention method in Program.cs
Lecture 56 Add GlobalUsings.cs for Each Project to Avoid Redundant Using Statements
Section 7: First Module: Catalog Module with Vertical Slice Architecture and CQRS
Lecture 57 Introduction - First Module: Catalog Module with Vertical Slice Architecture
Lecture 58 Domain Analysis of Catalog Module: Models, UCs, Rest Apis, Databases
Lecture 59 Technical Analysis of Catalog Module: Architectures, Patterns, Libraries, Folder
Lecture 60 Way of Development: Shared -> Modules -> API
Section 8: Develop Shared Domain for Tactical DDD Abstraction (Entity, Aggreagate, Events)
Lecture 61 Introduction - Develop Shared Domain for Tactical DDD Abstraction
Lecture 62 Domain Driven Design - DDD
Lecture 63 Tactical Domain-Driven Design: Entities, Value Objects, Aggregates, A. Rooots
Lecture 64 Develop DDD Abstractions (Entity, Aggregate, DomainEvent) in Shared Library
Lecture 65 Develop IDomainEvent interface in Tactical DDD Abstraction using MediatR
Lecture 66 Develop Aggregate classes in Tactical DDD Abstraction
Section 9: Develop Catalog Domain with Product Domain Entity Models
Lecture 67 Introduction - Develop Catalog Domain with Product Domain Entity Models
Lecture 68 Develop Product Domain Entity Models in Catalog Module Domain Models
Lecture 69 Anemic-domain vs Rich-domain Model Entities Entities in DDD
Lecture 70 Develop DDD Rich-domain model Entity for Product Entity
Lecture 71 Domain Events in DDD and Domain vs Integration Events
Lecture 72 Develop Product Created and Updated Domain Event in Catalog Module
Lecture 73 Raise ProductCreated and ProductPriceChanged Domain Event in Catalog Module
Section 10: Data Management of Modular Monolith: Setup Postgres as a Main Database
Lecture 74 Introduction - Data Management of Modular Monolith: Setup Postgres DB
Lecture 75 Data Management of Modular Monoliths: 4 Data Isolation Strategies
Lecture 76 Best Practice: DB Schema separation of Modules in Modular Monoliths apps
Lecture 77 Multi-context EF DB Context object for DB Separate Schema for Data Isolation
Lecture 78 Backing Services for Cloud-Native Architectures
Lecture 79 EShop Modular Monolith Deployment Strategy
Lecture 80 Setup PostgreSQL DB using Docker-compose file for Multi-container Docker env
Lecture 81 Add PostgreSQL DB image into Docker-compose file for Multi-container Docker env
Lecture 82 Run Docker-Compose on Visual Studio to setup PostgreSQL DB on Docker
Lecture 83 Connect and Browse PostgreSQL DB using pgAdmin
Section 11: Develop Shared and Catalog Data-Infrastructure with EF Core Code First
Lecture 84 Introduction - Develop Shared and Catalog Data-Infrastructure Layer with EF Core
Lecture 85 EF Core 8 Features, Code First Approach, Migrations and PostgreSQL Connection
Lecture 86 Steps of EF Core Developments for Shared and Catalog Data-Infrastructure
Lecture 87 Install EF Core Nuget Packages in Shared Library
Lecture 88 Develop EF Core DBContext Object for Storing Entities in Catalog Module
Lecture 89 Mapping DDD Objects to EF Entities - Develop EF Core Entity Configurations
Lecture 90 EF Core PostgreSQL Connection String in appsettings.json file
Lecture 91 Register EF Core DbContext in Asp.Net DependencyInjection Tool for PostgreSQL
Lecture 92 Create EF Core Migrations for CatalogDbContext - Part 1
Lecture 93 Create EF Core Migrations for CatalogDbContext - Part 2
Lecture 94 Review and Run Docker-Compose on Visual Studio to setup PostgreSQL DB on Docker
Lecture 95 Apply EF Core Migrations to PostgreSQL DB with Update-Database Command
Lecture 96 Auto Migrate EF Core Entities to PostgreSQL DB when Application Startup
Lecture 97 Develop Generic UseMigration extention method for DB Migration and Seed
Lecture 98 Using UseMigration extention method on Module DependencyInjection classes
Lecture 99 Test Auto-Migrations with UseMigration extention method on WebApplication
Lecture 100 Seed EShopDb Product Data When Application Startup Just After UseMigration
Lecture 101 Run Catalog Module to Migrate and Seed EShopDb with UseMigration method
Lecture 102 EF Core Interceptors: SaveChangesInterceptor for Auditing Entities
Lecture 103 Develop SaveChangesInterceptor to Auditing Entities for Order Entities
Lecture 104 Run&Test Catalog Module for Audit with EF Save Changes Interceptor
Lecture 105 Dispatch Domain Events w/ EF Core SaveChangesInterceptor
Lecture 106 Develop DispatchDomainEventsInterceptor to Trigger Domain Event Handlers
Lecture 107 Run&Test Catalog Module for Dispatch DomainEvents w/ EF SaveChanges Interceptor
Section 12: Application Use Case Development with CQRS and MediatR
Lecture 108 Introduction - Application Use Case development with CQRS and MediatR
Lecture 109 CQRS (Command Query Responsibility Segregation) Pattern
Lecture 110 Logical and Physical Implementation of CQRS Pattern
Lecture 111 CQRS Design Pattern With MediatR Library (Logical CQRS Implementation)
Lecture 112 Develop Feature Handler class with CQRS and MediatR
Lecture 113 Create Abstraction on MediatR for CQRS - Command and Query Separation
Lecture 114 Create Abstraction on MediatR for CQRS - Command and Query Separation - 2
Section 13: Catalog Application Use Case Development with CQRS and MediatR
Lecture 115 Introduction - Catalog Application Use Case Development with CQRS and MediatR
Lecture 116 Quick Remember Catalog Module Application Use Cases Analysis
Lecture 117 Develop Catalog Module Folder Structure for CQRS
Lecture 118 Develop Dto Classes for Product in Catalog Module
Lecture 119 Develop Products CreateProductCommand and Handler in Catalog Modules Application
Lecture 120 Develop Products CreateProductCommandHandler using CatalogDbContext in Catalog
Lecture 121 Develop Products UpdateProductCommand and Handler using CatalogDbContext
Lecture 122 Develop Products DeleteProductCommand and Handler using CatalogDbContext
Lecture 123 Develop Product Queries with CQRS and MediatR in Catalog Module
Lecture 124 Mapping with Mapster
Lecture 125 Develop Product Queries with CQRS and MediatR in Catalog Module w/ Mapster
Lecture 126 Develop GetProductByCategory Queries with CQRS and MediatR in Catalog Module
Lecture 127 Develop GetProductById Queries with CQRS and MediatR in Catalog Module
Lecture 128 Develop Domain Event Handlers with MediatR INotificationHandler in Catalog
Lecture 129 Develop Domain Event Handlers with MediatR INotificationHandler - Part 2
Section 14: Develop Catalog API Endpoints Expose Minimal Api Endpoints with Carter and REPR
Lecture 130 Introduction - Develop Catalog API Endpoints Exposing Minimal Api Endpoints
Lecture 131 REPR Design Pattern and CQRS MediatR Request LifeCycle
Lecture 132 Minimal Apis and Install Carter Library to Expose Minimal Apis
Lecture 133 Quick Remember Catalog Module Endpoints Analysis
Lecture 134 Develop CreateProduct POST Endpoint with Carter implements ICarterModule
Lecture 135 Develop CreateProduct POST Endpoint with Carter implements ICarterModule- Part 2
Lecture 136 Developing UpdateProduct Endpoint for REST APIs in Catalog Module
Lecture 137 Developing DeleteProduct Endpoint for REST APIs in Catalog Module
Lecture 138 Developing GetProducts Endpoint for REST APIs in Catalog Module
Lecture 139 Developing GetProductById Endpoint for REST APIs in Catalog Module
Lecture 140 Developing GetProductByCategory Endpoint for REST APIs in Catalog Module
Lecture 141 Register Carter libraries into Asp.Net Dependency Injection Service and Request
Lecture 142 Create Extention Method for Carter Assembly Registrations
Lecture 143 Create Postman Collection for EShopModules
Lecture 144 Test Catalog Module - CreateProduct POST Request - Debug Carter Minimal API
Lecture 145 Test UpdateProduct Endpoint with CQRS and VSA in Catalog Module
Lecture 146 Test Get Product Endpoints with CQRS and VSA in Catalog Module
Lecture 147 Test DeleteProduct Endpoint with CQRS and VSA in Catalog Module
Section 15: Develop Cross-cutting Concerns for Catalog and Each Module in EShop Modules
Lecture 148 Introduction - Develop Cross-cutting Concerns for Catalog and Each Module
Lecture 149 MediatR Pipeline Behaviours and Fluent Validation Library
Lecture 150 Add Cross-cutting Concerns into Shared Class Library to use in all modules
Lecture 151 Apply Validation with AbstractValidator using Fluent Validation Library
Lecture 152 Apply Validation with AbstractValidator using Fluent Validation Library - Part 2
Lecture 153 Validation Pipeline Behaviour with MediatR using Fluent Validation Library
Lecture 154 Remove Manual Validator and Test Validation Pipeline Behaviour with MediatR usin
Lecture 155 Develop CRUD Command Validators with Fluent Validation
Lecture 156 Global Handling Exceptions in ASP.NET Core with app.UseExceptionHandler
Lecture 157 Shared Handle Exceptions Generic Way in ASP.NET Core w/ app.UseExceptionHandler
Lecture 158 Global Exception Handling with IExceptionHandler interface in Asp.Net Core
Lecture 159 Register Custom Exception Handling into Asp.net with AddExceptionHandler method
Lecture 160 Logging Behavior in MediatR Pipeline for Cross-cutting concerns
Lecture 161 Test Logging Behaviour for all MediatR Requests on Catalog Module
Lecture 162 Structured Logging Using Serilog in .NET 8.0 Minimal APIs
Lecture 163 Serilog WriteTo Seq for Structured Logging in .NET
Lecture 164 Develop Pagination Class for Query GetProducts using CQRS and MediatR
Lecture 165 Develop GetProducts Query apply Pagination using CQRS and MediatR
Section 16: Develop Basket Module with Vertical Slice Architecture and CQRS
Lecture 166 Introduction - Develop Basket Module with Vertical Slice Architecture and CQRS
Lecture 167 Domain Analysis of Basket Module: Models, UCs, Rest Apis, Databases
Lecture 168 Technical Analysis of Basket Module: Architectures, Patterns, Libraries, Folders
Lecture 169 Develop ShoppingCart Domain Entity Models in Basket Domain Entities
Lecture 170 Develop DDD Rich-domain model Entity for ShoppingCart Entities
Section 17: Develop Basket Data-Infrastructure with EF Core Code First and PostgreSQL
Lecture 171 Introduction - Develop Basket Data-Infrastructure with EF Core Code First
Lecture 172 Steps of Infrastructure EF Core Developments for Basket Module
Lecture 173 Develop EF Core DBContext Object for Storing Entities in Basket Infrastructure
Lecture 174 Mapping DDD Objects to EF Entities - Develop EF Core Entity Configurations
Lecture 175 EF Core 8 Relations and DDD ValueObject Mapping with ComplexType and Property
Lecture 176 Develop SC and SC Items Relations Entity Configurations
Lecture 177 EF Core SQL Server Connection String in appsettings.json file
Lecture 178 Register EF Core DbContext in Asp.Net Dependency Injection Tool for PostgreSQL
Lecture 179 Create EF Core Migrations for BasketDbContext in Basket Infrastructure
Lecture 180 Run Docker-Compose on Visual Studio to setup PostgreSQL on Docker
Lecture 181 Apply EF Core Migrations to PostgreSQL DB with Update-Database Command
Lecture 182 Auto Migrate EF Core Entities to PostgreSQL when Application Startup with Coding
Lecture 183 Test Auto-Migrations with UseMigration Extention Method on WebApplication
Section 18: Develop Basket Application Use Case Development with CQRS and MediatR
Lecture 184 Introduction - Basket Application Use Case Development with CQRS and MediatR
Lecture 185 Develop Basket Folder Structure for CQRS
Lecture 186 Develop Dto Classes for ShoppingCart in Basket Module
Lecture 187 Develop Basket CreateBasketCommand and Handler in Basket Application Use Cases
Lecture 188 Develop Basket CreateBasketCommandHandler using BasketDbContext in Basket Module
Lecture 189 Develop Basket DeleteBasketCommand and Handler using BasketDbContext in Basket
Lecture 190 Develop Basket Queries with CQRS and MediatR in Basket Module
Lecture 191 Develop Basket AddItemIntoBasketHandler with CQRS and MediatR
Lecture 192 Develop Basket RemoveItemFromBasketHandler with CQRS and MediatR
Section 19: Develop Basket API Endpoints Exposing Minimal Api Endpoints with Carter and REPR
Lecture 193 Introduction - Develop Basket API Endpoints Exposing Minimal Api Endpoints
Lecture 194 Develop CreateBasket POST Endpoint with Carter implements ICarterModule
Lecture 195 Develop DeleteBasket Endpoint with Carter implements ICarterModule
Lecture 196 Develop GetBasket Endpoint with Carter implements ICarterModule for Minimal Apis
Lecture 197 Develop AddItemIntoBasket Endpoint with Carter implements ICarterModule
Lecture 198 Develop RemoveItemFromBasket Endpoint with Carter implements ICarterModule
Lecture 199 Register MediatR and Carter libraries into Asp.Net Dependency Injection Service
Lecture 200 Register MediatR libraries into Asp.Net Dependency Injection Service and Request
Lecture 201 Develop MediatR Extention Method for Custom Registration With Assemblies
Lecture 202 Test Basket API - CreateBasket POST Request - Debug Carter Minimal API
Lecture 203 Test Get Basket Endpoints with CQRS and VSA in Basket Module
Lecture 204 Test DeleteBasket Endpoint with CQRS and VSA in Basket Module
Lecture 205 Test AddItemIntoBasket Endpoint with CQRS and VSA in Basket Module
Lecture 206 Test RemoveItemFromBasket Endpoint with CQRS and VSA in Basket Module
Section 20: Develop Distributed Caching with Redis in Basket Module
Lecture 207 Introduction - Develop Distributed Caching with Redis in Basket Module
Lecture 208 Develop BasketRepository Class using EF Core DbContext object
Lecture 209 Implement IBasketRepository Class using EF Core DbContext object
Lecture 210 Register IBasketRepository into DI of Basket Module
Lecture 211 Inject and Use IBasketRepository into Handler classes in Basket Module
Lecture 212 Inject and Use IBasketRepository into AddItem and RemoveItem Handler classes
Lecture 213 Quick Test Basket Endpoint with CQRS and VSA in Basket Module
Lecture 214 Cache-aside Pattern and Cache Invalidation
Lecture 215 Proxy Pattern, Decorator Pattern and Scrutor Library
Lecture 216 Develop CachedBasketRepository with Proxy Pattern, Decorator Pattern and Scrutor
Lecture 217 Develop CachedBasketRepository with Proxy Pattern, Decorator Pattern - Part 2
Lecture 218 Develop CachedBasketRepository with Proxy Pattern, Decorator Pattern - Part 3
Lecture 219 Register Decorated CachedBasketRepository and StackExchangeRedis with Scrutor
Lecture 220 Register StackExchangeRedis into Common DI in Api Project Program.cs
Lecture 221 Setup Redis as a Distributed Cache using Docker-compose file for Multi-container
Lecture 222 Run Docker-Compose on Visual Studio to setup Redis Distributed Cache on Docker
Lecture 223 Connect Redis Cache from Local Basket Module and send GET request Basket Cache
Lecture 224 Develop Custom JsonConverter for ShoppingCart and Items When Reading to Redis
Lecture 225 Develop Custom JsonConverter for ShoppingCart and Items - Part 2
Lecture 226 Use Custom JsonSerializerOptions with JsonConverter for ShoppingCart and Items
Lecture 227 Quick Test Basket Endpoint with CachedBasket Repository and Custom JsonConverter
Section 21: Sync Communications between Modules with In-process Method Calls (Public APIs)
Lecture 228 Introduction - Sync Communications between Modules with In-process Method Calls
Lecture 229 How Modular Monolithic Architecture Handle Communications Between Modules
Lecture 230 Basket Module Synchronous Use Cases - Adding an Item to the Basket Communication
Lecture 231 Examine AddItemIntoBasketHandler Class: Get Product Price from Catalog Module
Lecture 232 Sync Communication Between Modules Using Contracts Class Libraries
Lecture 233 Step 1: Create Catalog.Contracts Class Library
Lecture 234 Step 2: Move exposing MediatR method Query or Commands into Catalog.Contracts
Lecture 235 Spliting CQRS Contract related common operations into Shared.Contracts Class lib
Lecture 236 Step 3: Modify Catalog Module getting reference from Catalog.Contracts Class Lib
Lecture 237 Step 4: Basket Get Reference from Catalog.Contracts Class Library
Lecture 238 Step 6: Get Product entity values into AddItemIntoBasketHandler and set Price
Lecture 239 Test Basket AddItemIntoBasket Sync Call to Catalog Module to Get Product Data
Lecture 240 Step 7: Migrating Microservices: Evolving Contracts Sync Communication
Section 22: Async Communications between Modules w/ RabbitMQ & MassTransit for UpdatePrice
Lecture 241 Introduction - Async Communications between Modules w/ RabbitMQ & MassTransit
Lecture 242 How Modular Monolithic Architecture Handle Async Communications Between Modules
Lecture 243 Fan-Out Publish/Subscribe Messaging Pattern
Lecture 244 Quick Remember: Domain vs Integration Events - Domain leads to Integration Event
Lecture 245 Domain Analysis of Async Communication between Catalog and Basket Modules
Lecture 246 Technical Analysis of Async Communication between Catalog and Basket Modules
Lecture 247 Steps of Developing Async Communication between Catalog and Basket Modules
Lecture 248 Step1: Examine Catalog Module Domain and Integration Events
Lecture 249 Step2: Create Shared.Messaging Class Library
Lecture 250 Develop ProductPriceChangedIntegration Event in Shared.Messaging Class Library
Lecture 251 Develop MassTransit Extention Methods to Register RabbitMQ connection into DI
Lecture 252 Develop MassTransit Extention Methods to Register connection into DI of Catalog
Lecture 253 Add Project Reference to Shared.Messaging in Catalog and Basket Modules
Lecture 254 Register MassTransit Packages into Bootstrapper Api DI in Program.cs file
Lecture 255 ProductPriceChanged Integration Event: How Domain leads to Integration Event
Lecture 256 Step3: Catalog Publish UpdatePrice Integration Event
Lecture 257 Step4: Basket Subscribe and consume ProductPriceChanged Integration Event
Lecture 258 Develop UpdateItemPriceInBasket Feature in Basket Module
Lecture 259 Develop UpdateItemPriceInBasket Feature in Basket Module - Part 2
Lecture 260 Call UpdateItemPriceInBasketCommand in ProductPriceChangedIntegrationEventHander
Lecture 261 TEST - ProductPriceChangedIntegrationEvent w/ In-memory MassTransit
Lecture 262 What is RabbitMQ and Main Components of RabbitMQ (Producer, Queue, Consumer)
Lecture 263 Shifting In-memory Bus to RabbitMQ Message broker in Masstransit
Lecture 264 Develop MassTransit Extention Methods to Register RabbitMQ connection into DI
Lecture 265 Setup RabbitMQ for Async Communication using Docker-compose file
Lecture 266 Run Docker-Compose on Visual Studio to setup RabbitMQ on Docker
Lecture 267 TEST - ProductPriceChangedIntegrationEvent w/ RabbitMQ MassTransit
Beginner .NET Developers who is curious about .NET Backend technologies with Modular Monolith Architectures