Course Outline
Bridging Language Skills and Solution Design
- Advanced C# features and their impact on design.
- Extracting design intent from legacy code.
Analyzing Requirements and Modeling the Domain
- Defining use cases, user stories, and acceptance criteria.
- Constructing domain models and establishing a ubiquitous language.
Foundational Software Design Principles
- Applying SOLID principles to .NET solutions.
- Managing coupling, cohesion, and dependency flow.
Applying Design Patterns in .NET
- Selecting appropriate creational, structural, and behavioral patterns.
- Identifying patterns and anti-patterns within existing codebases.
Architecture Styles and Strategic Decisions
- Comparing layered, hexagonal, and clean architecture approaches.
- Creating architecture decision records and analyzing trade-offs.
Structuring the Solution
- Organizing solutions and projects for large-scale codebases.
- Choosing between modular monoliths and service-oriented boundaries.
Writing Maintainable Code with Modern C#
- Leveraging pattern matching, records, and nullable reference types.
- Utilizing generics, LINQ, and functional composition.
Handling Exceptions, Logging, and Observability
- Developing exception strategies and error contracts.
- Implementing structured logging, correlation, and health checks.
Reflection, Attributes, and Metaprogramming
- Designing with attributes and applying reflection use cases.
- Using source generators and compile-time code generation.
Core ASP.NET Core Concepts
- Understanding the hosting model, dependency injection, and configuration.
- Navigating the request pipeline, middleware, and filters.
Architecting REST APIs
- Modeling resources and applying HTTP semantics.
- Managing versioning, validation, and error responses.
- Defining API contracts using OpenAPI.
Enhancing .NET Application Security
- Implementing authentication and authorization via OpenID Connect.
- Configuring policy-based authorization and secrets management.
Threat Modeling and Secure Design
- Applying STRIDE modeling and defining trust boundaries.
- Conducting secure design reviews before implementation begins.
Data Access via Entity Framework Core
- Modeling entities and their relationships.
- Managing DbContext lifetimes and migration strategies.
Optimizing Query Performance and Data Architecture
- Selecting loading strategies and avoiding eager loading pitfalls.
- Handling transactions, concurrency tokens, and bypassing EF when necessary.
Mastering Concurrency and Asynchronous Programming
- Working with Tasks, the TPL, and common async/await pitfalls.
- Implementing synchronization, cancellation, and thread safety.
Performance Tuning
- Profiling and benchmarking using BenchmarkDotNet.
- Optimizing memory usage, allocations, and garbage collection.
- Developing caching strategies and conducting load testing.
Layered Testing Strategies
- Defining boundaries for unit, integration, and end-to-end testing.
- Ensuring testable architecture and using test doubles.
Deployment and Operational Readiness
- Managing containers, configuration, and CI/CD pipelines.
- Performing production diagnostics and ensuring release safety.
Capstone: Design Review and Implementation
- Reviewing the architecture of a case-study application.
- Implementing and refactoring a specific feature slice.
Requirements
- Proficiency in C# programming
- Practical understanding of object-oriented concepts
- Foundational knowledge of SQL and relational database systems
Intended Audience
- .NET developers
- Software engineers and technical leads
- Developers transitioning into application design roles
Testimonials (3)
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
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.