Course Outline
Transitioning from Syntax to System Design
- Advanced C# capabilities and their impact on architectural design.
- Reverse-engineering design intent from legacy or existing codebases.
Requirements Analysis and Domain Modeling
- Defining use cases, user stories, and acceptance criteria.
- Constructing domain models and establishing a ubiquitous language.
Core Software Design Principles
- Applying SOLID principles to .NET-based solutions.
- Managing coupling, cohesion, and the direction of dependencies.
Design Patterns in .NET Ecosystems
- Selecting appropriate creational, structural, and behavioral patterns.
- Identifying patterns versus anti-patterns within existing code.
Architectural Styles and Technical Decision Making
- Comparing layered, hexagonal, and clean architecture approaches.
- Utilizing Architecture Decision Records (ADRs) and conducting trade-off analyses.
Structuring the Solution
- Organizing solutions and projects to accommodate large-scale codebases.
- Evaluating modular monoliths against service-oriented boundary definitions.
Contemporary C# for Maintainability
- Leveraging pattern matching, records, and nullable reference types.
- Mastering generics, LINQ, and functional composition techniques.
Exception Handling, Logging, and Observability
- Defining exception strategies and establishing error contracts.
- Implementing structured logging, request correlation, and health checks.
Reflection, Attributes, and Metaprogramming
- Designing with attributes and exploring practical reflection use cases.
- Utilizing source generators and compile-time code generation.
Foundations of ASP.NET Core
- Understanding the hosting model, dependency injection, and configuration management.
- Navigating the request pipeline, middleware, and filter mechanisms.
Architecting REST APIs
- Modeling resources and adhering to HTTP semantics.
- Handling versioning, input validation, and standardized error responses.
- Defining API contracts using OpenAPI standards.
Fortifying .NET Applications
- Implementing authentication and authorization via OpenID Connect.
- Applying policy-based authorization and managing secrets securely.
Threat Modeling and Secure Architecture
- Conducting STRIDE threat modeling and defining trust boundaries.
- Performing secure design reviews prior to development.
Data Access via Entity Framework Core
- Mapping entities and defining complex relationships.
- Managing DbContext lifecycles and formulating migration strategies.
Query Efficiency and Data Architecture
- Choosing loading strategies and avoiding common eager loading issues.
- Handling transactions, concurrency tokens, and scenarios requiring bypassing EF.
Concurrency and Asynchronous Patterns
- Working with Tasks, the TPL, and overcoming async/await complexities.
- Managing synchronization, cancellation flows, and thread safety.
Performance Tuning
- Profiling and benchmarking using BenchmarkDotNet.
- Optimizing memory usage, allocations, and garbage collection impacts.
- Deploying caching strategies and conducting load tests.
Layered Testing Strategies
- Distinguishing boundaries between unit, integration, and end-to-end tests.
- Designing for testability and employing test doubles.
Deployment and Operational Preparedness
- Utilizing containers, managing configuration, and setting up CI/CD pipelines.
- Implementing production diagnostics and ensuring release safety.
Capstone: Design Critique and Execution
- Conducting an architectural review of a case-study application.
- Implementing and refactoring a specific feature slice to demonstrate best practices.
Requirements
- Practical programming experience with C#
- Proficiency in object-oriented programming concepts
- Familiarity with SQL and relational database structures
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.