Mastering Modern .NET Architecture

5 days
UNARCH
5 days

Upcoming Sessions

Date:

Format:

Price:

Location:

Book now

Date:

Format:

Price:

Location:

Book now

Date:

Format:

Price:

Location:

Book now

Date:

Format:

Price:

Book now

Need a private training for your team?  Request a private training

Not ready to book yet?   Request an offer

Architectural Principles

Good architecture is about making good decisions over time, not about following rules or trends. This module explains why clear principles help teams make consistent choices and avoid confusion as systems and requirements change.

  • The Role of an Architect
  • What is Good Architecture?
  • Architectural Drivers
  • Architectural Principles: Encapsulation, Separation of Concerns, ...

N-Tier Architecture

N-Tier architecture is still very common, often because it feels familiar and safe. This module explains why it became popular, what it does well, and why it can become a problem when applications grow larger.

  • What is N-Tier?
  • Physical Tiers vs. Logical Layers
  • The Standard Layered Stack: Data Access, Business, Presentation
  • Anemic Models
  • Testability, Maintainability, Performance
  • LAB: Creating a Simple N-Tier Application

Clean Architecture

Clean Architecture tries to keep business logic independent from frameworks and infrastructure. This module explains why this separation makes applications easier to test, change and maintain, while also showing where it can add extra complexity.

  • Dependency Inversion
  • Domain, Application, Infrastructure, Presentation Layers
  • Domain Modelling with Entities and Value Objects
  • Domain, Application and Infrastructure Services
  • Domain Events
  • Testability, Maintainability, Performance
  • LAB: Migrating from N-Tier to Clean Architecture

Mapping

Mapping is often used to separate different models in an application, but it is not free. This module explains why mapping exists, what problems it tries to solve, and why too much mapping can slow teams down.

  • Why and Where to Map
  • Types of Mapping
  • Manual vs. Automated Mapping
  • Architectural Purity and Developer Productivity
  • Performance and Maintainability
  • LAB: Using Source Generation for Mapping

Persistence Strategy

Data access is a frequent source of design problems in .NET applications. This module evaluates repository patterns, common pitfalls, and practical DbContext usage in both Clean Architecture and Vertical Slices.

  • Repository Pattern
  • Unit of Work Pattern
  • Direct DbContext Usage
  • Aggregates
  • The "Generic Repository" Trap
  • Specification Pattern
  • Unit Testing Reality
  • LAB: Using DbContext in Clean Architecture

Vertical Slice Architecture

In layered architectures, small changes often touch many parts of the system. This module explains why organizing code around features can make applications easier to understand, change and maintain.

  • The Layer "Tax"
  • Vertical Slice Philosophy
  • Managing Shared Logic
  • The Testing Pyramid vs. The Diamond
  • Maintainability and Performance
  • LAB: Migrating from Clean Architecture to Vertical Slices

Result Objects and Exceptions

Operations can succeed, fail, be cancelled or return different kinds of results. This module dicusses how to handle these situations clearly and consistently, and how these choices affect control flow, clarity and system behavior.

  • Exceptions vs Error Codes
  • Domain Exceptions
  • Flow Control Patterns/li>
  • Result Pattern
  • Domain Errors
  • Exceptions vs Results
  • Hybrid Approach
  • LAB: Exploring Trade-offs with FluentResults

CQRS

Command Query Responsibility Segregation (CQRS) is a powerful pattern for complex domains, but it can be overkill for simpler applications. This module explains why CQRS exists, what problems it solves, and how to apply it pragmatically without unnecessary complexity.

  • CQS
  • System-Level CQRS
  • Application-Level CQRS
  • Commands, Queries and Handlers
  • CQRS vs CRUD
  • Cross-Cutting Concerns
  • LAB: Adding CQRS to Clean Architecture

Messaging Patterns

Messaging is often introduced to decouple components, but can easily increase complexity. This module explains why messaging patterns exist and how to apply them deliberately without turning systems into hard-to-follow workflows.

  • Mediator Pattern
  • General-Purpose Messaging System
  • Request/Reply and Notifications
  • Mediator: Hero or Villain?
  • Mediator Libraries and Criticism
  • Domain Events
  • Event Aggregator
  • LAB: Implementing Messaging with Wolverine

Microservices

By splitting up a monolith into bite-size microservices, you make your application a lot more suitable for the cloud.

  • Dealing with Evolution in an Application
  • Benefits and Drawbacks
  • Communication: client-service, service-service
  • Data Isolation
  • LAB: Building simple Microservice with Aspire

Modular Monolith

This module explains why modular monoliths offer a pragmatic alternative that enables strong boundaries without premature distribution.

  • The Microservices Tax
  • Modular Monolith as strategic middle ground
  • Module Communication & Integration
  • Data Isolation Strategies
  • Implementation Risks and Pitfalls
  • LAB: From Microservices to Modular Monolith

Monorepo vs Polyrepo

Repository structure influences dependency management, team autonomy and evolution speed. This module explains why neither monorepos nor polyrepos are universally correct and how context determines their effectiveness.

  • Atomic Refactoring
  • Central Management
  • The "Slow Build" Myth
  • Debugging Experience
  • Team Ownership
  • Migration

Building Reusable Libraries

Reusable libraries often fail due to hidden assumptions about their consumers. This module explains why designing for unknown usage contexts is essential for adoption, longevity and safe evolution.

  • API Design Principles
  • Dependency Management
  • Versioning
  • Configuration and Extensibility
  • Writing Context-Agnostic Code
  • Evolution and Governance
  • LAB: Building a Reusable Library for Document Processing

Quality Gates

Quality does not scale through manual reviews alone. This module explains why automated quality gates are needed to enforce standards, protect architecture and keep delivery predictable.

  • Build Validation
  • Code Style and Formatting
  • Static Code Analysis
  • Testing & Coverage Thresholds
  • Architectural Tests
  • Security & Dependency Audits
  • Code Reviews
  • AI Code Generation Guidelines
  • LAB: Setting up a Quality Gated Project

Monitoring and Observability

Without observability, systems cannot be trusted in production. This module explains why structured telemetry enables faster diagnosis, better decisions and controlled operational cost.

  • Monitoring vs Observability
  • Open Telemetry in .NET
  • Structured Logging, Traces and Metrics
  • Sampling
  • Reliability Engineering
  • Application Health and Lifecycle
  • LAB: OpenTelemetry with Aspire

Feature Management

Feature management enables teams to deliver software faster and with greater confidence by decoupling deployment from release. This chapter explores how to use feature flags not just as a technical tool, but as a strategy for safer, more adaptive product development.

  • Feature Management in .NET
  • Trunk-Based Development with Release Flags
  • Gradual Rollout
  • A/B Testing
  • Observability
  • Best Practices and Pitfalls
  • LAB: Implementing a Feature Management Kill Switch

The answer to the ultimate question of life, the universe and good architecture is: It depends. This training equips .NET developers and architects to make principled trade-off decisions across architectural styles, deployment models and governance practices. It provides the insights needed to structure maintainable projects, enforce quality gates and balance developer productivity with long-term sustainability, without falling into common anti-patterns like leaky abstractions or dependency hell.

This training is designed for

  • Medior and senior .NET developers who need a deeper understanding of their current architecture
  • Senior .NET developers transitioning into architecture roles
  • Solution architects designing enterprise-grade .NET applications
  • Tech leads responsible for code quality, testing strategy, and architectural governance

A solid C#/.NET background is required; no prior architecture training is necessary.

Contact Us
  • Address:
    U2U nv/sa
    Z.1. Researchpark 110
    1731 Zellik (Brussels)
    BELGIUM
  • Phone: +32 2 466 00 16
  • Email: info@u2u.be
  • Monday - Friday: 9:00 - 17:00
    Saturday - Sunday: Closed
Say Hi
© 2026 U2U All rights reserved.