Course Outline
From Language Skills to Solution Design
- Advanced C# features and their implications for design.
- Recovering design intent from existing codebases.
Requirements Analysis and Domain Modelling
- Use cases, user stories, and acceptance criteria.
- Domain models and the use of ubiquitous language.
Software Design Principles
- Application of SOLID principles to .NET solutions.
- Coupling, cohesion, and dependency direction.
Design Patterns for .NET Applications
- Selecting creational, structural, and behavioural patterns.
- Identifying patterns and anti-patterns in existing code.
Architecture Styles and Technical Decision-Making
- Comparing layered, hexagonal, and clean architecture.
- Architecture decision records and trade-off analysis.
Planning Solution Structure
- Solution and project organisation for large codebases.
- Modular monolith versus service-oriented boundaries.
Modern C# for Maintainable Code
- Pattern matching, records, and nullable reference types.
- Generics, LINQ, and functional composition.
Exception Handling, Logging, and Observability
- Exception strategies and error contracts.
- Structured logging, correlation, and health checks.
Reflection, Attributes, and Metaprogramming
- Attribute-driven design and reflection use cases.
- Source generators and compile-time code generation.
ASP.NET Core Fundamentals
- Hosting model, dependency injection, and configuration.
- Request pipeline, middleware, and filters.
Designing REST APIs
- Resource modelling and HTTP semantics.
- Versioning, validation, and error responses.
- Defining API contracts with OpenAPI.
Securing .NET Applications
- Authentication and authorisation using OpenID Connect.
- Policy-based authorisation and secrets management.
Threat Modelling and Secure Design
- STRIDE modelling and trust boundaries.
- Secure design review prior to implementation.
Data Access with Entity Framework Core
- Modelling entities and relationships.
- DbContext lifetime and migration strategies.
Query Performance and Data Architecture
- Loading strategies and pitfalls of eager loading.
- Transactions, concurrency tokens, and bypassing EF.
Concurrency and Asynchronous Programming
- Tasks, the TPL, and async/await pitfalls.
- Synchronisation, cancellation, and thread safety.
Performance Optimisation
- Profiling and benchmarking with BenchmarkDotNet.
- Memory, allocations, and garbage collection.
- Caching strategies and load testing.
Testing Strategy Across Layers
- Unit, integration, and end-to-end testing boundaries.
- Testable architecture and the use of test doubles.
Deployment and Operational Readiness
- Containers, configuration, and CI/CD pipelines.
- Production diagnostics and release safety.
Capstone: Design Review and Implementation
- Architecture review of a case application.
- Implementing and refactoring a feature slice.
Requirements
- Programming experience in C#
- Working knowledge of object-oriented programming
- Basic understanding of SQL and relational databases
Target Audience
- .NET developers
- Software engineers and technical leads
- Developers transitioning into application design roles
Testimonials (4)
It was 1-on-1 so the training was specialized to my specific needs. Shane highlighted elements of WPF/C# that could potentially be beneficial to my development projects.
Warren Nolan - Northrop Grumman
Course - Programming in WPF
Trainer knowledge, involvement, and rapport
Adam Kuklewski - GE Medical Systems Polska
Course - Technical Architecture and Patterns
The explanations and interactivity of the trainer, he really brought the subject well; and even-though I was probably not experienced enough, I did learn a lot from it!
Pieter Bruynseels - Spot Buy Center BV
Course - Design Patterns
Nice and friendly. Very knowledgeable. Would recommend Shane to others.