- Versions and History
- Cloud Design Patterns
- Object Oriented Programming
- Videos
- Books
- GitHub
- Other resources
Expand
|9.0.0|Release notes|Blog roundup|
8.0.11 | Release notes | Blog roundup |
8.0.10 | Release notes | Blog roundup |
8.0.8 | Release notes | Blog roundup |
8.0.7 | Release notes | Blog roundup |
8.0.6 | Release notes | Blog roundup |
8.0.5 | Release notes | Blog roundup |
8.0.4 | Release notes | Blog roundup |
8.0.3 | Release notes | Blog roundup |
8.0.2 | Release notes | Blog roundup |
8.0.1 | Release notes | Blog roundup |
8.0.0 | Release notes | Blog roundup |
7.0.20 | Release notes | Blog roundup |
7.0.19 | Release notes | Blog roundup |
7.0.18 | Release notes | Blog roundup |
7.0.17 | Release notes | Blog roundup |
7.0.16 | Release notes | Blog roundup |
7.0.15 | Release notes | Blog roundup |
7.0.14 | Release notes | Blog roundup |
7.0.13 | Release notes | Blog roundup |
7.0.12 | Release notes | |
7.0.11 | Release notes | Blog roundup |
7.0.10 | Release notes | Blog roundup |
7.0.9 | Release notes | Blog roundup |
7.0.8 | Release notes | Blog roundup |
7.0.7 | Release notes | Blog roundup |
7.0.5 | Release notes | Blog roundup |
7.0.4 | Release notes | Blog roundup |
7.0.3 | Release notes | Blog roundup |
7.0.2 | Release notes | Blog roundup |
7.0.1 | Release notes | Blog roundup |
7.0.0 | Release notes | Blog roundup |
5.0.17 | Release notes | Blog roundup |
5.0.16 | Release notes | Blog roundup |
5.0.15 | Release notes | Blog roundup |
5.0.14 | Release notes | Blog roundup |
5.0.13 | Release notes | Blog roundup |
5.0.12 | Release notes | Blog roundup |
5.0.11 | Release notes | Blog roundup |
5.0.10 | Release notes | Blog roundup |
5.0.9 | Release notes | Blog roundup |
5.0.8 | Release notes | Blog roundup |
5.0.7 | Release notes | Blog roundup |
5.0.6 | Release notes | Blog roundup |
5.0.5 | Release notes | Blog roundup |
5.0.4 | Release notes | Blog roundup |
5.0.3 | Release notes | Blog roundup |
5.0.2 | Release notes | Blog roundup |
5.0.1 | Release notes | Blog roundup |
5.0.0 | Release notes | Blog roundup |
3.0.3 | Release notes | Blog roundup |
3.0.2 | Release notes | Blog roundup |
3.0.1 | Release notes | Blog roundup |
3.0.0 | Release notes | Blog roundup |
2.2.8 | Release notes | Blog roundup |
2.2.7 | Release notes | Blog roundup |
2.2.6 | Release notes | Blog roundup |
2.2.5 | Release notes | Blog roundup |
2.2.4 | Release notes | Blog roundup |
2.2.3 | Release notes | Blog roundup |
2.2.2 | Release notes | Blog roundup |
2.2.1 | Release notes | Blog roundup |
2.2.0 | Release notes | Blog roundup |
2.1.30 | Release notes | Blog roundup |
2.1.28 | Release notes | Blog roundup |
2.1.27 | Release notes | Blog roundup |
2.1.26 | Release notes | Blog roundup |
2.1.25 | Release notes | Blog roundup |
2.1.24 | Release notes | Blog roundup |
2.1.23 | Release notes | Blog roundup |
2.1.22 | Release notes | Blog roundup |
2.1.21 | Release notes | Blog roundup |
2.1.20 | Release notes | Blog roundup |
2.1.19 | Release notes | Blog roundup |
2.1.18 | Release notes | Blog roundup |
2.1.17 | Release notes | Blog roundup |
2.1.16 | Release notes | Blog roundup |
2.1.15 | Release notes | Blog roundup |
2.1.14 | Release notes | Blog roundup |
2.1.13 | Release notes | Blog roundup |
2.1.12 | Release notes | Blog roundup |
2.1.11 | Release notes | Blog roundup |
2.1.10 | Release notes | Blog roundup |
2.1.9 | Release notes | Blog roundup |
2.1.8 | Release notes | Blog roundup |
2.1.7 | Release notes | Blog roundup |
2.1.6 | Release notes | |
2.1.5 | Release notes | Blog roundup |
2.1.4 | Release notes | Blog roundup |
2.1.3 | Release notes | |
2.1.2 | Release notes | |
2.1.1 | Release notes | |
2.1.0 | Release notes | Blog roundup |
2.0.9 | Release notes | |
2.0.7 | Release notes | |
2.0.6 | Release notes | |
2.0.5 | Release notes | Blog roundup |
2.0.4 | Release notes | |
2.0.3 | Release notes | Blog roundup |
2.0.0 | Release notes | Blog roundup |
1.1.13 | Release notes | Blog roundup |
1.1.12 | Release notes | Blog roundup |
1.1.11 | Release notes | Blog roundup |
1.1.10 | Release notes | |
1.1.9 | Release notes | |
1.1.8 | Release notes | |
1.1.7 | Release notes | |
1.1.6 | Release notes | Blog roundup |
1.1.5 | Release notes | Blog roundup |
1.1.4 | Release notes | |
1.1.2 | Release notes | |
1.1.1 | Release notes | |
1.1.0 | Release notes | Blog roundup |
1.0.16 | Release notes | Blog roundup |
1.0.15 | Release notes | Blog roundup |
1.0.14 | Release notes | Blog roundup |
1.0.13 | Release notes | |
1.0.12 | Release notes | |
1.0.11 | Release notes | |
1.0.10 | Release notes | |
1.0.9 | Release notes | Blog roundup |
1.0.8 | Release notes | Blog roundup |
1.0.7 | Release notes | |
1.0.5 | Release notes | |
1.0.4 | Release notes | |
1.0.3 | Release notes | |
1.0.0 | Release notes | Blog roundup |
Expand
- Availability
- Deployment stamps
- Deploy multiple independent copies of application components, including data stores
- Geodes
- Deploy backend services into a set of geographical nodes, each of which can service any client request in any region
- Health endpoint monitoring
- Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals
- Queue-based load leveling
- Use a queue that acts as a buffer between a task and a service that it invokes, to smooth intermittent heavy loads
- Throttling
- Control the consumption of resources by an instance of an application, an individual tenant, or an entire service
- Deployment stamps
- Data management
- Cache-aside
- Load data on demand into a cache from a data store
- Command and Query responsibility segregation (CQRS)
- Segregate operations that read data from operations that update data by using separate interfaces
- Event sourcing
- Use an append-only store to record the full series of events that describe actions taken on data in a domain
- Index table
- Create indexes over the fields in data stores that are frequently referenced by queries
- Materialized view
- Generate prepopulated views over the data in one or more data stores when the data isn't ideally formatted for required query operations
- Sharding
- Divide a data store into a set of horizontal partitions or shards
- Static content hosting
- Deploy static content to a cloud-based storage service that can deliver them directly to the client
- Valet key
- Use a token or key that provides clients with restricted direct access to a specific resource or service
- Cache-aside
- Design and Implementation
- Ambassador
- Create helper services that send network requests on behalf of a consumer service or application
- Anti-corruption layer
- Implement a façade or adapter layer between a modern application and a legacy system
- Backends for Frontends
- Create separate backend services to be consumed by specific frontend applications or interfaces
- Command and Query responsibility segregation (CQRS)
- Segregate operations that read data from operations that update data by using separate interfaces
- Compute resource consolidation
- Consolidate multiple tasks or operations into a single computational unit
- External configuration store
- Move configuration information out of the application deployment package to a centralized location
- Gateway aggregation
- Use a gateway to aggregate multiple individual requests into a single request
- Gateway offloading
- Offload shared or specialized service functionality to a gateway proxy
- Gateway routing
- Route requests to multiple services using a single endpoint
- Leader election
- Coordinate the actions performed by a collection of collaborating task instances in a distributed application by electing one instance as the leader that assumes responsibility for managing the other instances
- Pipes and filters
- Break down a task that performs complex processing into a series of separate elements that can be reused
- Sidecar
- Deploy components of an application into a separate process or container to provide isolation and encapsulation
- Static content hosting
- Deploy static content to a cloud-based storage service that can deliver them directly to the client
- Strangler fig
- Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services
- Ambassador
- Management and Monitoring
- Ambassador
- Create helper services that send network requests on behalf of a consumer service or application
- Anti-corruption layer
- Implement a façade or adapter layer between a modern application and a legacy system
- External configuration store
- Move configuration information out of the application deployment package to a centralized location
- Gateway aggregation
- Use a gateway to aggregate multiple individual requests into a single request
- Gateway offloading
- Offload shared or specialized service functionality to a gateway proxy
- Gateway routing
- Route requests to multiple services using a single endpoint
- Health endpoint monitoring
- Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals
- Sidecar
- Deploy components of an application into a separate process or container to provide isolation and encapsulation
- Strangler fig
- Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services
- Ambassador
- Messaging
- Asynchronous request-reply
- Decouple backend processing from a frontend host, where backend processing needs to be asynchronous, but the frontend still needs a clear response
- Claim-check
- Split a large message into a claim check and a payload to avoid overwhelming a message bus
- Choreography
- Have each component of the system participate in the decision-making process about the workflow of a business transaction, instead of relying on a central point of control
- Competing consumers
- Enable multiple concurrent consumers to process messages received on the same messaging channel
- Pipes and filters
- Break down a task that performs complex processing into a series of separate elements that can be reused
- Priority queue
- Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those with a lower priority
- Publish-subscriber
- Enable an application to announce events to multiple interested consumers asynchronously, without coupling the senders to the receivers
- Queue-based load leveling
- Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads
- Scheduler agent supervisor
- Coordinate a set of actions across a distributed set of services and other remote resources
- Sequential convoy
- Process a set of related messages in a defined order, without blocking processing of other groups of messages
- Asynchronous request-reply
- Performance and Scalability
- Cache-aside
- Load data on demand into a cache from a data store
- Choreography
- Have each component of the system participate in the decision-making process about the workflow of a business transaction, instead of relying on a central point of control
- Command and Query responsibility segregation (CQRS)
- Segregate operations that read data from operations that update data by using separate interfaces
- Event sourcing
- Use an append-only store to record the full series of events that describe actions taken on data in a domain
- Deployment stamps
- Deploy multiple independent copies of application components, including data stores
- Geodes
- Deploy backend services into a set of geographical nodes, each of which can service any client request in any region
- Index table
- Create indexes over the fields in data stores that are frequently referenced by queries
- Materialized view
- Generate prepopulated views over the data in one or more data stores when the data isn't ideally formatted for required query operations
- Priority queue
- Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those with a lower priority
- Queue-based load leveling
- Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads
- Sharding
- Divide a data store into a set of horizontal partitions or shards
- Static content hosting
- Deploy static content to a cloud-based storage service that can deliver them directly to the client
- Throttling
- Control the consumption of resources by an instance of an application, an individual tenant, or an entire service
- Cache-aside
- Resiliency
- Bulkhead
- Isolate elements of an application into pools so that if one fails, the others will continue to function
- Circuit breaker
- Handle faults that might take a variable amount of time to fix when connecting to a remote service or resource
- Compensating transatcion
- Undo the work performed by a series of steps, which together define an eventually consistent operation
- Health endpoint monitoring
- Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals
- Leader election
- Coordinate the actions performed by a collection of collaborating task instances in a distributed application by electing one instance as the leader that assumes responsibility for managing the other instances
- Queue-based load leveling
- Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads
- Retry
- Enable an application to handle anticipated, temporary failures when it tries to connect to a service or network resource by transparently retrying an operation that's previously failed
- Scheduler agent supervisor
- Coordinate a set of actions across a distributed set of services and other remote resources
- Bulkhead
- Security
- Federated identity
- Delegate authentication to an external identity provider.
- Gatekeeper
- Protect applications and services by using a dedicated host instance that acts as a broker between clients and the application or service, validates and sanitizes requests, and passes requests and data between them
- Valet key
- Use a token or key that provides clients with restricted direct access to a specific resource or service
- Federated identity
Expand
- Single Responsibility Principle Explained Practically in C# (The S in SOLID)
- Open Closed Principle Explained Practically in C# (The O in SOLID)
- Liskov Substitution Principle Explained Practically in C# (The L in SOLID)
- Interface Segregation Principle Explained Practically in C# (The I in SOLID)
- Dependency Inversion Principle Explained Practically in C# (The D in SOLID)
Expand
- NDC Conferences
- .NET
- Architecture and Clouds
- Security
- Web
- Data and Machine Learning
- People and Process
- NDC Oslo 2024
- NDC Sydney 2024
- NDC London 2024
- NDC Security 2024
- NDC Porto 2023
- NDC TechTown 2023
- NDC Copenhagen 2023 (Developers Festival)
- NDC Olso 2023
- NDC London 2023
- NDC Security 2023
- NDC Sydney 2022
- NDC Oslo 2022
- NDC Minnesota 2022
- NDC Melbourne 2022
- NDC TechTown 2022
- NDC Copenhagen 2022
- NDC London 2022
- NDC Porto 2022
- NDC Security 2022
- NDC Sydney 2021
- NDC Oslo 2021
- NDC TechTown 2021
- NDC Melbourne 2021
- NDC London 2021
- NDC Sydney 2020
- NDC TechTown 2020
- NDC Oslo 2020
- NDC DevOps 2020
- NDC London 2020
- NDC Security 2020
- NDC Sydney 2019
- NDC TechTown 2019
- NDC Oslo 2019
- NDC Minnesota 2019
- NDC Copenhagen 2019
- NDC Security 2019
- NDC Porto 2019
- NDC London 2019
- NDC Sydney 2018
- NDC TechTown 2018
- NDC Oslo 2018
- NDC Minnesota 2018
- NDC London 2018
- NDC Security 2018
- NDC TechTown 2017
- NDC Sydney 2017
- NDC Oslo 2017
- NDC Copenhagen 2017
- NDC London 2017
- NDC Sydney 2016
- NDC Oslo 2016
- dotNET
- Microsoft Visual Studio
- CodecampRomania
- Nick Chapsas
- Raw Coding
- Milan Jovanovic
- Zoran Horvat
- CodeOpinion
- Code Aesthetic
- Fireship
- ThePrimeTimeagen
- Dave's Garage
- DotNextConf
- DevTernity
- IAmTimCorey
- Clean coders hate what happens to your code when you use these enterprise programming tricks
- Declarative thinking, declarative practice - Kevlin Henney
- Get kata - Kevlin Henney
- Functional C++ - Kevlin Henney
- Lean code - Kevlin Henney
- Seven ineffective coding habits of many programmers - Kevlin Henney
- Small is beautiful - Kevlin Henney
- Test smells and fragrances - Kevlin Henney
- The error of our ways - Kevlin Henney
- The forgotten art of Structured Programming - Kevlin Henney
- Thinking outside the synchronisation quadrant - Kevlin Henney
- What do you mean? - Kevlin Henney
- Abusing C# - Jon Skeet
- Back to basics: The mess we've made of our fundamental data types - Jon Skeet
- C# 7 - Jon Skeet
- C# 8 - Jon Skeet, and Mads Torgersen
- Integration, integration, integration - Jon Skeet
- The changing state of immutability C# - Jon Skeet
- The functional journey of C# - Mads Torgersen
- What’s new in C# 9.0 and beyond - Mads Torgersen
- Where's C# headed? - Mads Torgersen
- Why you should take another look at C# - Mads Torgersen
- Building Secure Microservices in Azure - Jimmy Bogard
- Domain-Driven Design: The good parts - Jimmy Bogard
- Domain-Driven Refactoring - Jimmy Bogard
- Effective microservice communication and conversation patterns - Jimmy Bogard
- Vertical slice architecture - Jimmy Bogard
- Anatomy of ASP.NET Core requests - Steve Gordon
- ASP.NET Core Kestrel: Adventures in building a fast web server - Damian Edwards, and David Fowler
- Back to basics: Efficient async/await - Filip Ekberg
- Beyond LINQ: Using expression trees in .NET - Max Arshinov
- Building an open source government application platform in the cloud - Buadu, Larsen, and Kylstad
- Building event-driven microservices with Event Sourcing and CQRS - Lidan Hifi
- Capability mapping - Ian Cooper
- Change your habits: Modern techniques for modern C# - Bill Wagner
- Clean Testing: Clean Architecture with .NET Core - Jason Taylor
- Common mistakes and misconceptions in web security using OAuth 2.0 and OpenId Connect - Nahid Farrokhi
- Correcting common async/await mistakes in .NET - Brandon Minnick
- Death of a Craftsman: A software developer identity crisis - Einar Høst
- Do developers dream of stateless apps? - Lukasz Gebel
- Exploring Pattern Matching in C# - Bill Wagner
- F# as a better Python - Phillip Carter
- F# for C# programmers - Scott Wlaschin
- From Dependency Injection to Dependency Rejection - Mark Seemann
- Functional architecture: The pits of success - Mark Seemann
- Having fun with Generics and Abstract classes in C# - Don Wibier
- How I work with JSON - Einar Høst
- Let’s get lazy: The real power of FP - Venkat Subramaniam
- Lies developers tell themselves - Billy Hollis
- Make it boring - Jeremy Wagner
- Make your custom .NET GC: whys and hows - Konrad Kokosa
- Microservices for building an IDE: The innards of JetBrains Rider - Maarten Balliauw
- Navigating microservices with .NET Core - Ryan Nowak
- One kata, three languages - Mark Seemann
- Opening keynote: NDC Sydney 2020 - Dylan Beattie
- Patterns for high-performance C# - Federico Lois
- Practical Domain-Driven Design with EF Core - Hossam Barakat
- PRs: Merge with your team - Eirik Isene
- Pushing C# to the limit - Joe Albahari
- State of the .NET performance - Adam Sitnik
- The art of code - Dylan Beattie
- The lazy programmer's guide to writing thousands of tests - Scott Wlaschin
- The power of composition - Scott Wlaschin
- The power of Roslyn - Kasey Uhlenhuth
- Thinking outside the synchronisation quadrant - Kevlin Henney
- Visualise, document and explore your software architecture - Simon Brown
- What were they thinking? Language design choices that seem wrong, until they don't - Bill Wagner
- When each millisecond counts? - Dmitry Konovalov
- NDC Sydney 2020 - Party livestream
- 'Wouldn’t it be cool..' and other bad design approaches - Billy Hollis
- 10 tips for failing badly at microservices - David Schmitz
- An opinionated, maintainable REST API architecture for ASP.NET Core - Spencer Schneidenbach
- Anatomy of ASP.NET Core requests - Steve Gordon
- API vs. SDK: What's the difference? - Nathan Hekman
- Building a microservice architecture with ASP.NET Core - Gill Cleeren
- Building and generating a .NET client for a large API - Maarten Balliauw
- Building event-driven microservices with Event Sourcing and CQRS - Lidan Hifi
- Building microservices with .NET Core and Docker - Edwin van Wijk
- Capability mapping - Ian Cooper
- Come learn Kubernetes! - Blaize Stewart
- Design microservice architectures the right way - Michael Bryzek
- Functional architecture: The pits of success - Mark Seemann
- High-performance code design patterns in C# - Konrad Kokosa
- High-performance servers with NET Core - Oren Eini
- Microservices anti-patterns - Tammer Saleh
- Microservices explained in 5 minutes
- Microservices for building an IDE: The innards of JetBrains Rider - Maarten Balliauw
- Navigating microservices with .NET Core - Ryan Nowak
- Never RESTing: RESTful API best practices using ASP.NET Web API - Spencer Schneidenbach
- The hardest part of microservices is your data - Christian Posta
- Top 5 techniques for building the worst microservice system ever - William Brander
- Vertical slice architecture - Jimmy Bogard
- Visualise, document and explore your software architecture - Simon Brown
- When and how to use the actor model: An introduction to Akka.NET actors - Aaron Stannard
- .NET 6 deep dive. What's new and what's coming - Scott Hunter
- .NET Data Community Standup - Collections of primitive values in EF Core
- 5 performance tips in C#
- 10 C# libraries to save you time and energy - Tim Corey
- 30 string manipulation techniques in C# - Tim Corey
- Adding JWT Authentication & Authorization in ASP.NET Core - Nick Chapsas
- ASP.NET Core 3.0: State of the art - Dino Esposito
- C# 9: Language features
- C# LINQ performance tips #1 - Let keyword & Custom Lookup
- C# source generators: Write code that writes code - David Wengier
- Clean code
- ContinueWith: Solving async void - SingletonSean
- Cursor pagination and database index seek - Milan Jovanovic
- Design tech talk - OO design for testability
- Does TDD really lead to good design? - Sandro Mancuso
- Efficient exponentiation - mCoding
- Entity Framework Core 5.0: The next generation for data access - Jeremy Likness, and Shay Rojansky
- Exploring Pattern Matching in C# - Bill Wagner
- Fast inverse square root — A Quake III algorithm
- How I built the internet's best performing code execution engine (Piston) - Engineer Man
- How to easily measure CPU performance and allocation patterns - Christophe Nasarre-Soulier
- How to structure a .NET Solution - Nick Chapsas
- If considered harmful: How to eradicate 95% of all your bugs in one simple step - Jules May
- Let’s get lazy: The real power of FP - Venkat Subramaniam
- Make your custom .NET GC: whys and hows - Konrad Kokosa
- Patterns for application development with ASP.NET Core - Damian Edwards, and David Fowler
- Patterns for high-performance C# - Federico Lois
- Practical Domain-Driven Design with EF Core - Hossam Barakat
- Pushing C# to the limit - Joe Albahari
- TDD: The bad parts — Matt Parker
- TDD: Where did it all go wrong - Ian Cooper
- The clean code talks - Don't look for things!
- The clean code talks - Inheritance, polymorphism, and testing
- What’s new in C# 9.0 and beyond - Mads Torgersen
- When each millisecond counts? - Dmitry Konovalov
- Why you should take another look at C# - Mads Torgersen
- Writing high performance code in .NET - Bart De Smet