Extended Syllabus - Web Applications with C#
Course: Web Applications with C#
Code: ICD0024
ECTS: 6 (156 student hours)
SIS/ÕIS: Web Applications with C# (ICD0024)
Duration: 16 weeks + 1 extra defense day
Course year: 2nd year
Semester: Spring (4th semester)
Format: Flipped classroom
Students: ~115
TAs: 5
Language: English if any Erasmus/exchange students are enrolled; otherwise Estonian. Q&A Estonian and English
Written language: English (slides, comments, code, etc...)
Contact: Friday 13:00-16:00, ICO-221 (Weeks 1-16) — optional clinic/demo; 0-3h depending on attendance + extra day Week 17
Attendance: Friday sessions are optional. Defense attendance is mandatory (remote by prior arrangement).
Teacher: Andres Käver
Email: andres.kaver@taltech.ee
Student Quick Start
Weekly workflow: Watch pre-recorded video lectures (~1.5h) before the Friday session. Attend optional clinic/demo Friday 13:00-16:00 (ICO-221). Work on assignments during the week (~5-8h). Use MS Teams CSharp Web channel for questions.
Deadlines: Code must be committed and pushed to git by 23:59:59 on Thursday evening (the day before Friday defense sessions in weeks 5, 10, and 15), serving as the code-freeze deadline.
Defense weeks: D1 = Week 5-6, D2 = Week 10-11, D3 = Week 15-17. Retakes on weeks 7, 12, and 17.
Passing rules: Each defense must score >50% of its points. You must pass ALL three defenses to pass the course. One retake allowed across all defenses (capped at 75% of original points).
Attendance: Weekly Friday sessions are optional clinic/demo sessions. Defense attendance is mandatory. Remote defense by prior arrangement only.
If code does not compile at defense: You may fall back to the last working commit in your repository, or you will be given a 10-minute hotfix window to resolve compilation issues. If neither produces a running application, the assignment receives 0 points. See "Defense Logistics" for full details.
AI usage: AI tools are encouraged (semi-mandatory). You must document prompts and modifications. You must be able to explain every line of your code without AI assistance at defense.
Grade scale: 5 (90-120), 4 (80-89), 3 (70-79), 2 (60-69), 1 (50-59), 0 (<50 or failed defense). Maximum 120 points (100 base + 20 bonus).
What counts as a "client app": A working application that consumes your backend REST API (Vue/React from JS course, Blazor, Razor Pages via HttpClient, or any other technology) is mandatory. Swagger UI, Bruno, and Postman do NOT count.
Goals (from ÕIS)
- To introduce modern web applications (MVC, REST API, JS) and possibilities for their creation.
- To develop software development skills with .NET framework tools.
Learning Outcomes (from ÕIS)
- L01 - Uses JSON markup language for storing complex structured data and presenting data in a structured form.
- L02 - Creates simple client applications for common web services with the help of publicly available instructions.
- L03 - Creates simple web services using .NET Framework technologies and tools.
- L04 - Under normal circumstances uses technologies and tools used to secure web services.
- L05 - Describes and uses the areas of use of web applications and their architectures.
General competencies course develops (not graded)
1.1 Self-management and learning competence
- self-management
- self-regulation
- learning skills
1.2 Critical thinking
- critical information acquisition skills
- analytical skills
- problem-solving skills
- argumentation skills
- self-assessment skills
1.4 Communication competence
- self-expression in different forms
- adaptation of communication style
- giving feedback
Communication 2025/2026 spring
- Main channel - MS Teams
- Teacher Andres Käver - andres.kaver@taltech.ee (SLA: response in 2 office days)
- Office hours - by appointment (room ICO-521B)
- TA-s
- Mikk Raba - mikk.raba@taltech.ee
- Karl Rudolf Õigus - kaoigu@taltech.ee
- Jürgen Marten Kuusik - jurkuu@taltech.ee
- Illimar Reinbusch - ilrein@taltech.ee
- Stella Tukia - sttuki@taltech.ee
- Course materials
- Moodle (when needed) Key:
cweb26spring - GitLab. Use group
2025-2026-spring, create your repository with name<uniid>-<yourproject> - Echo
- Defence slot allocation https://register.proxy.itcollege.ee/
- Contact session every Friday 13:00-16:00, ICO-221 (16 weeks, from 06.02.2026) — optional clinic/demo (defense attendance mandatory)
- Course demos akaver personal git2
Pre-Requirements
Students should have mastered the following before taking this course:
Programming Fundamentals
- Variables, data types, operators
- Control structures (if/else, loops, switch)
- Functions (parameters, return values, scope)
- Arrays and basic data structures
- Object-oriented programming basics (classes, objects, inheritance)
- Debugging techniques
C# Fundamentals
- Classes, interfaces, abstract classes
- Generics basics
- LINQ basics (Where, Select, OrderBy)
- Nullable types
- Exception handling (try/catch/finally)
Web Fundamentals
- HTML5 (semantic elements, forms, tables, multimedia)
- CSS3 (selectors, box model, flexbox, grid, responsive design, media queries)
- How HTTP works (request/response cycle, status codes, headers)
- Client-server architecture concepts
- Browser developer tools usage
Development Tools
- Git version control (clone, commit, push, pull, branches, merge, resolving conflicts)
- Command line/terminal basics (navigation, file operations, running commands)
- Code editor proficiency (VS Code or JetBrains Rider recommended)
- .NET SDK and dotnet CLI concept (will be taught, but understanding the concept helps)
- Package managers concept (NuGet)
Database Basics
- Relational database concepts (tables, rows, columns, keys)
- Basic SQL (SELECT, INSERT, UPDATE, DELETE, JOINs)
- ER diagrams understanding
Literature
Recommended books to read:
- Mastering ASP.NET Core 10: Web Applications Made Easy with the Biggest Update Yet
- Architecting ASP.NET Core Applications - Third Edition
- ASP.NET Core in Action, Third Edition
- Clean Architecture: A Craftsman's Guide to Software Structure and Design
- Clean Architecture with .NET
- Practical Entity Framework Core 10: Database Access for Enterprise Applications
- Entity Framework Core in Action, Second Edition
Workload Distribution
| Component | Hours |
|---|---|
| Video lectures | 24 |
| Weekly assignments | 96 |
| Defense preparation | 20 |
| Self-study | 14 |
| Defense | 2 |
| Contact sessions (practices, Q and A) (16 weeks) | 0-48 (optional) |
| Total | 156 |
Course Structure Overview
Core Theme: Architecture Progression
This course is built around two phases of project work:
- A1 (Weeks 1–3): Each student works on a teacher-assigned project to rapidly establish N-tier MVC fundamentals, Identity, i18n, htmx/Alpine.js, and testing practices.
- A2–A5 (Weeks 4–15): Each student proposes and builds their own project from scratch, progressively applying increasingly sophisticated architectural patterns:
Clean/Onion Architecture → REST API + Client → Docker/CI/CD → Modular Monolith → Microservices
A2–A5 are cumulative — students build one application and iteratively refactor its architecture. The focus is on understanding WHY each architectural pattern exists, WHEN to apply it, and the trade-offs involved — not just memorizing the structure.
Core Curriculum (Weeks 1-9)
| Week | Topic | Assignment | Defense |
|---|---|---|---|
| 1 | C# Refresher + ASP.NET Core MVC + EF Core + AI Dev Tools | A1: N-Tier MVC App | - |
| 2 | Identity + i18n + htmx + Alpine.js + N-Tier Patterns | A1 cont. | - |
| 3 | Testing (Unit + Integration + E2E + Mocking) | A1 cont. | - |
| 4 | Clean Architecture Principles + Domain Layer | A2: Clean Arch + REST API + Client | - |
| 5 | Application Layer + CQRS-lite + MediatR + Mappers | A2 cont. | D1 start (A1) |
| 6 | Infrastructure Layer + Repository + Unit of Work | A2 cont. | - |
| 7 | REST API + JWT Authentication + Swagger | A2 cont. | - |
| 8 | Client App Integration + Business Rules + Validation | A2 cont. | - |
| 9 | Docker + CI/CD + VPS Deployment | A3: DevOps | - |
Advanced Architecture (Weeks 10-15)
| Week | Topic | Assignment | Defense |
|---|---|---|---|
| 10 | Modular Monolith Fundamentals + DDD Basics | A4: Modular Monolith | D2 starts (A2+A3) |
| 11 | Module Structure in .NET + Bounded Contexts | A4 cont. | - |
| 12 | Inter-Module Communication + Message Queues + Shared Kernel | A4 cont. | - |
| 13 | Microservice Patterns + Service Extraction | A5: Simple Microservices | - |
| 14 | Service Communication + Data Ownership | A5 cont. | - |
| 15 | API Gateway + Architecture Review + Comparison | A5 cont. | D3 starts (A3+A4+A5+Demo) |
| 16 | Buffer / Retakes | - | Retakes |
| 17 | Extra Defense Day | - | Final retakes + consultation |
Week 17 (Extra Defense Day): One additional contact day after semester end for final retakes and consultation. This replaces a separate theory/practical exam - all assessment is done through assignment defenses.
Teacher discretion: If class progression requires more time on core material, Microservice weeks may be condensed. Decision made by Week 12 based on defense pass rates and assignment completion.
N-Tier assumption: Students are expected to have a working understanding of N-tier architecture (DAL, BLL, UI separation) from previous courses. Weeks 1-3 are a rapid setup using familiar patterns, enhanced with htmx and Alpine.js for lightweight frontend interactivity in MVC views.
Testing from day one: Testing is introduced as part of A1 and is a cross-cutting requirement for ALL subsequent assignments. Every assignment must maintain and extend test coverage — unit tests, integration tests, and E2E tests. There is no separate testing week or assignment; testing is woven into the development process from the start.
Cross-cutting patterns (weave throughout):
- Mediator pattern — introduced in Clean Architecture (Week 5) for decoupling handlers from controllers, reused in Modular Monolith for inter-module messaging
- Message queues — introduced in Modular Monolith (Week 12) for inter-module async communication, carried into Microservices
- Eventual consistency — introduced in Modular Monolith (Week 12), deepened in Microservices (Week 14) — same problem at different scales
Cross-course integration: Students concurrently enrolled in "JavaScript" (ICD0006) use their ASP.NET Core backend (from this course) as the backend for assignments in the JS course, reinforcing cross-course learning.
Client application requirement: All students MUST have a working client application consuming the REST API for A2. Students in the JS course use their Vue/React frontend. Students NOT in the JS course should build a client in another ASP.NET Core project (e.g., Blazor, Razor Pages consuming the API via HttpClient) or any technology of their choice. Swagger UI or API testing tools (Bruno, Postman) do NOT count as a client application.
Note: A1 is a standalone foundational exercise using a teacher-assigned project. Starting from A2, students propose their own project and all subsequent assignments (A2–A5) are cumulative, building on the SAME student-proposed application. Each phase refactors and extends the previous architecture. This simulates real-world software evolution.
Assignment deadlines
- Code must be committed and pushed to git by 23:59:59 on Thursday evening (the day before Friday defense sessions in weeks 5, 10, and 15), serving as the code-freeze deadline.
How the course works
- Before session: videos, personal preparation
- During session: demo and Q&A with teacher, clinics and defense with TA's
- After session: assignment work + support channels
- Gitlab, VPS, AI access, etc. provided by course
- Expected time per week: 8–10h (videos ~1.5h, r&d ~5–8h, optional demos and clinic ~0–3h)
Grading Overview
Assessment Model: All grading is done through assignment defenses. No separate theory or practical exam.
Defense Points (100 total + 20 bonus)
| Defense | Points | Passing (>50%) |
|---|---|---|
| D1: N-Tier MVC + htmx/Alpine + Testing (A1) | 25 | >12.5 |
| D2: Clean Architecture + REST API + Client + DevOps (A2+A3) | 35 | >17.5 |
| D3: Modular Monolith + Microservices + Full Demo (A3+A4+A5) | 40 | >20 |
| Total | 100 | >50 |
| Bonus points (TA/Teacher discretion) | +20 | |
| Maximum possible | 120 |
D1 points (0–25) = 25 × (A1/100)
D2 points (0–35) = 35 × (0.7×A2 + 0.3×A3)/100
D3 points (0–40) = 40 × (0.2×A3 + 0.4×A4 + 0.4×A5)/100
Passing Requirements
- Each defense must achieve >50% of its points to pass
- Must pass ALL defenses to pass the course
- Overall course grade based on total points earned
Retake Penalty
- Retakes only available for failed defenses (<50%)
- Retake maximum is 75% of original points
- One retake allowed total
- In case of technical issues (e.g., Gitlab or VPS outage) contact teacher
Bonus Points (up to 20) TAs and teacher may award bonus points for:
- Exceptional code quality or architecture
- Going beyond requirements
- Outstanding documentation
- Creative solutions
- Helping other students
- Active participation
Grade Scale
| Grade | Points |
|---|---|
| A (5) | 90-120 |
| B (4) | 80-89 |
| C (3) | 70-79 |
| D (2) | 60-69 |
| E (1) | 50-59 |
| F (0) | <50 or failed defense |
Learning Outcomes ↔ Assessment Alignment
| Learning Outcome | Primary Assessment |
|---|---|
| LO1: Uses JSON for structured data | A2 REST API (JSON I/O), all assignments via API testing |
| LO2: Creates client applications for web services | A2 client app, A5 inter-service communication |
| LO3: Creates web services using .NET | A1 MVC, A2 REST API, A4 Modular API, A5 Microservice API |
| LO4: Uses technologies to secure web services | A1 Identity, A2 JWT, A3 SSL/deployment |
| LO5: Describes and uses web application architectures | A1-A5 progressive architecture + D1/D2/D3 defense |
For the detailed mapping including teaching weeks and evidence requirements, see the Learning Outcomes ↔ Assessment Mapping section in Assignments.md.
Reduced Curriculum (If Modular Monolith/Microservices Dropped)
If teacher decides to drop extended curriculum, defense points redistribute:
Without Microservices (D1 + D2 + partial D3)
- D1: 25 points
- D2: 35 points
- D3 (DevOps + Modular Monolith + Full App Demo): 40 points
- Bonus: +20
D1 points (0–25) = 25 × (A1/100) D2 points (0–35) = 35 × (0.7×A2 + 0.3×A3)/100 D3 points (0–40) = 40 × (0.3×A3 + 0.7×A4)/100
Defense Logistics
Schedule (Full Curriculum)
- D1 (Week 5): N-Tier MVC + htmx/Alpine + Testing - A1 (25 points)
- D2 (Week 10): Clean Architecture + REST API + Client + DevOps - A2 + A3 (35 points)
- D3 (Week 15): Modular Monolith + Microservices + Full App Demo - A3 + A4 + A5 (40 points)
- Week 16: Buffer / Retakes
- Week 17: Extra Defense Day (final retakes + consultation)
- Code must compile and run at defense. If the latest commit does not compile or the application does not start:
- Fallback: The student may request to use the earlier commit in their repository. Students are encouraged to tag a known-good commit before each defense.
- Hotfix window: If no tagged commit exists, the student has a one-time 10-minute window to fix compilation issues on the spot. The timer starts when the TA identifies the issue.
- If neither produces a running application: The assignment receives 0 points for that defense.
- Code defense is done using the student's own laptop and VPS
- Defense slots are available for allocation via Moodle or other similar system
- Students must bring their own laptop to defense
- 5 TA-s are working in parallel, be prepared to wait for your turn
- remote defense or off the hours defense are possible, but require prior agreement
Format
- D1: 15-20 minutes per student (N-Tier MVC + htmx/Alpine + Testing)
- D2: 15-25 minutes per student (Clean Architecture + REST API + Client + DevOps)
- D3: 15-30 minutes per student (Modular Monolith + Microservices + architecture evolution demo)
- Student presents work (5-10 min)
- TA asks questions
- Points awarded immediately after defense
- Points are recorded in Moodle gradebook within 2 working days
- If a student disagrees with the awarded points, they must contact the teacher (not the TA) within 5 working days via email (andres.kaver@taltech.ee). The teacher will review the code, git history, and if necessary conduct a brief re-defense. The teacher's decision is final.
- Overall course grade is published in ÕIS after all defenses (including retakes) are complete
D3 Full Application Demo Requirements
- Application must be deployed and accessible
- Student demonstrates architecture evolution live (Clean Architecture → Modular Monolith → Microservice) and can explain N-Tier concepts from A1
- No slides - show the actual working application and code structure
- Be prepared for TA to request specific scenarios
- Explain trade-offs at each architectural stage
Defense Assessment Rubric
All defenses are assessed using these five dimensions:
| Dimension | What TAs evaluate |
|---|---|
| Architecture correctness | Proper layer separation, dependency direction, pattern application |
| Security & authentication | Identity/JWT implementation, authorization, data isolation |
| Testing | Test coverage, test quality, appropriate test types |
| Code quality | Naming, conventions, project organization, clean code |
| Explanation & understanding | Ability to explain decisions, trade-offs, and code without AI assistance |
TA Calibration: All TAs use the same rubric and scoring guidelines. Before each defense period, TAs complete a calibration session with the teacher using sample submissions. Borderline cases (within 2 points of a pass/fail threshold) are escalated to the teacher for a second review if needed.
Passing Rules
- Each defense requires >50% of its points to pass
- Failing ANY defense = failing the course (regardless of total points)
Retake Policy
- Only ONE retake allowed in total (across all defenses)
- Retake is only possible if defense failed (<50%)
- Retake penalty: maximum 75% of original points available
- Retake must be completed before the next defense period starts:
- D1 retake: must complete before D2 (Week 10)
- D2 retake: must complete before D3 (Week 15)
- D3 retake: Week 16 or Week 17 (Extra Defense Day)
- Students needing retakes should aim for bonus points to compensate for the penalty
- Retake is on following week after the regular defense (one day only)
For example: Student passes D1, fails D2, uses retake, then fails D3 → course fail (because no retake left + must pass all defenses).
Bonus Points (up to 20)
- Awarded at TA/teacher discretion throughout the course
- Can be given during any defense or for overall performance
- Bonus points added to final total after all defenses complete
Students with special needs
Students with special needs are encouraged to contact the instructor at the beginning of the course. If special needs may affect participation or assessment, the instructor should be informed at the beginning of the course so appropriate accommodation can be arranged. Students may also contact the university support services for accessibility arrangements. All requests will be handled confidentially.
AI Usage Policy
Encouraged (semi mandatory)
- Using AI for code generation with proper specifications (Claude Code, GitHub Copilot, etc.)
- Spec-driven development: write specifications first, let AI generate implementation
- Learning from AI explanations of architectural patterns
- Debugging with AI assistance
- Documentation generation
Required documentation
- Keep prompts/specs used
- Note what AI got wrong
- Describe your modifications
- Alternative solutions considered
- Architecture decision records (ADRs) where applicable
Not acceptable (defense fail)
- Submitting AI code without actual understanding
- Copying without verification
- Unable to explain your codebase without AI assistance
- Cannot explain WHY a particular architecture pattern was chosen
Academic Integrity
You are allowed to use any source for your work, citations are not mandatory. Wide usage of AI is allowed (expected). Self organized group work is allowed (each student must maintain their own code repository). You are allowed to use external code (ai, external help, etc.). Personal requirements apply - code in git, vps deployment, ci/cd, etc. Third-party code/assets must follow their license terms.
But you must be able to explain your work/code individually in minute details and defend it in front of the teacher and TA's - without external/ai help.
No animals were harmed during the making of this course. Except my dog, who was harmed by me not having enough time to play with him.
Planned Lectures Content (Prerecorded Videos)
Week 1: C# Refresher + ASP.NET Core MVC + EF Core + AI Dev Tools (4 videos, ~120 min total)
Video 1.1: C# Refresher & Modern Features (30 min)
- C# 12/13 features overview (primary constructors, collection expressions, raw string literals)
- Async/await patterns and Task-based programming
- LINQ refresher (method syntax, query syntax, deferred execution)
- Nullable reference types and null safety
- Pattern matching enhancements
- Record types and value objects
Video 1.2: ASP.NET Core MVC Introduction (30 min)
- ASP.NET Core project structure and startup
- Program.cs and minimal hosting model
- MVC pattern: Controllers, Views, Models
- Razor syntax basics
- Tag Helpers overview
- Routing conventions
- Model binding and validation basics
Video 1.3: Entity Framework Core + Database Design (35 min)
- Code First approach, DbContext configuration
- Entity configuration: Data Annotations vs Fluent API
- Designing entity relationships (one-to-many, many-to-many)
- Navigation properties and foreign keys
- Creating and applying migrations
- Seeding initial data
Video 1.4: Spec-Driven Development with AI (25 min)
- Writing effective specifications for code generation
- AI coding tools: Claude Code, GitHub Copilot, JetBrains AI
- Specification → implementation → review cycle
- Iterative refinement workflow
- When AI helps vs. when it hurts
- Documentation generation with AI
Week 2: Identity + i18n + htmx + Alpine.js + N-Tier Patterns (4 videos, ~160 min)
Video 2.1: ASP.NET Core Identity + Authorization (30 min)
- Adding Identity to an existing project
- Custom ApplicationUser and ApplicationRole
- Cookie-based authentication flow
- Login, registration, logout
- Role-based authorization (
[Authorize(Roles = "Admin")]) - User data isolation (filtering by UserId)
- Seeding admin user and roles
Video 2.2: Internationalization with Resource Files (25 min)
- .resx resource files structure
- IStringLocalizer and IHtmlLocalizer
- View localization and Data Annotations localization
- Culture provider configuration (cookie, query string, accept-language)
- Culture switching UI element
Video 2.3: htmx (30 min)
- htmx philosophy: HTML over the wire, not JSON
- Core attributes:
hx-get,hx-post,hx-swap,hx-trigger,hx-target - Partial views in ASP.NET Core for htmx responses
- Inline editing, search-as-you-type, load-more pagination
- Loading indicators with
hx-indicator hx-boostfor progressive enhancement of existing links/forms- Error handling and fallback behavior
- When htmx makes sense vs. when you need a full SPA
Video 2.4: Alpine.js (35 min)
- Alpine.js philosophy: lightweight, declarative reactivity
- Core directives:
x-data,x-show,x-bind,x-on,x-model,x-for - Interactive components: dropdowns, modals, toggle panels, confirmation dialogs
- Combining htmx + Alpine.js for rich server-rendered UIs
Video 2.5: N-Tier Patterns (35 min)
- N-Tier solution structure deep dive (DAL, BLL, Web projects)
- Generic repository pattern, service layer patterns
- Code quality and clean code basics
Week 3: Testing (Unit + Integration + E2E + Mocking) (4 videos, ~120 min)
Video 3.1: Unit Testing with xUnit (30 min)
- xUnit project setup and test project structure
- Test structure: Arrange, Act, Assert
- [Fact] and [Theory] attributes
- Mocking with Moq or NSubstitute
- Testing BLL services (business logic, validation)
- Testing mappers and data transformations
- Code coverage reports and thresholds
Video 3.2: Integration Testing (30 min)
WebApplicationFactory<T>for MVC/API testing- In-memory database vs test containers
- Testing controller actions via HTTP client
- Testing authentication flows (register, login, logout)
- Testing authorization (accessing other user's data)
- Test data setup and cleanup
Video 3.3: E2E Testing (25 min)
- Playwright setup for ASP.NET Core apps
- Page Object Model pattern
- Testing user registration and login
- Testing CRUD workflows through the UI
- Testing navigation and authorization redirects
- Screenshots on failure
Video 3.4: Error Handling & Test Strategy (35 min)
- Global exception handling middleware
- ProblemDetails standard
- Structured logging with Serilog basics
- Testing as a cross-cutting concern
- Test organization patterns (per layer, per feature)
- When to write which type of test
- Code coverage: what to measure, what to ignore
Week 4: Clean Architecture Principles + Domain Layer (3 videos, ~90 min)
Video 4.1: Clean Architecture Principles (30 min)
- Problems with traditional N-tier (coupling, dependency direction)
- Onion Architecture / Clean Architecture / Hexagonal Architecture comparison
- The Dependency Rule: dependencies point inward
- Layer responsibilities and boundaries
- When Clean Architecture is worth the complexity
- Trade-offs vs simpler architectures
Video 4.2: Domain Layer Design (35 min)
- Entities vs Value Objects
- Domain enums and constants
- Domain interfaces (what belongs in the domain)
- Base entity classes (Id, audit fields)
- Domain events concept
- Aggregate roots (brief DDD introduction)
- Rich domain models vs anemic domain models
Video 4.3: Dependency Inversion in Practice (25 min)
- Interface segregation for repositories
- Restructuring project references (removing DAL reference from Web)
- Composition root pattern (wiring in Web/Program.cs)
- Microsoft.Extensions.DependencyInjection in practice
- Service lifetimes: Scoped, Transient, Singleton
- Verifying no layer violations (architecture tests concept)
Week 5: Application Layer + CQRS-lite + MediatR + Mappers (3 videos, ~90 min)
Video 5.1: Application Layer & Use Cases (30 min)
- Application layer responsibilities
- Service interfaces and implementations
- Use case pattern (single responsibility per operation)
- Input/output DTOs for each operation
- Application-level exceptions
- Orchestrating domain operations
Video 5.2: DTOs & Mappers (35 min)
- Why DTOs at every boundary
- Manual mapping (extension methods, static mappers)
- AutoMapper setup and profiles
- Mapping domain ↔ DTO ↔ ViewModel
- Nested object mapping
- Collection mapping
- Performance considerations
Video 5.3: CQRS-lite + MediatR (30 min)
- Command Query Responsibility Segregation concept
- Read models vs write models
- Separate DTOs for create/update/read operations
- MediatR setup:
IRequest<T>,IRequestHandler<TRequest, TResponse> - Decoupling controllers from application logic via MediatR
- Commands and queries as MediatR requests
- Pipeline behaviors (logging, validation, transaction management)
- When MediatR adds value vs unnecessary indirection
- Practical CQRS without event sourcing