# Exceptions & Validation ## 📕 Articles - [Design validations in the domain model layer](https://docs.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/domain-model-layer-validations) - [REST API Data Validation](http://www.kamilgrzybek.com/design/rest-api-data-validation/) - [Domain Model Validation](http://www.kamilgrzybek.com/design/domain-model-validation/) - [Validation in a DDD world](https://lostechies.com/jimmybogard/2009/02/15/validation-in-a-ddd-world/) - [Domain Command Patterns - Validation](https://jimmybogard.com/domain-command-patterns-validation/) - [Validation in Domain-Driven Design (DDD)](http://gorodinski.com/blog/2012/05/19/validation-in-domain-driven-design-ddd/) - [Validation and DDD](https://enterprisecraftsmanship.com/posts/validation-and-ddd/) - [C# code contracts vs input validation](https://enterprisecraftsmanship.com/posts/code-contracts-vs-input-validation/) - [The fallacy of the always-valid entity](https://jeffreypalermo.com/2009/05/the-fallacy-of-the-always-valid-entity/) - [When to validate commands in CQRS?](https://enterprisecraftsmanship.com/2019/02/20/validate-commands-cqrs/) - [Exceptions for flow control in C#](https://enterprisecraftsmanship.com/posts/exceptions-for-flow-control/) - [Fail Fast principle](https://enterprisecraftsmanship.com/posts/fail-fast-principle/) - [Functional C#: Primitive obsession](https://enterprisecraftsmanship.com/posts/functional-c-primitive-obsession/) ⭐ - [Functional C#: Non-nullable reference types](https://enterprisecraftsmanship.com/posts/functional-c-non-nullable-reference-types/) ⭐ - [REST API response codes: 400 vs 500](https://enterprisecraftsmanship.com/posts/rest-api-response-codes-400-vs-500/) - [Functional C# Handling failures, input errors](https://enterprisecraftsmanship.com/posts/functional-c-handling-failures-input-errors/) - [Prefer Custom Exceptions to Framework Exceptions](https://ardalis.com/prefer-custom-exceptions-to-framework-exceptions/) - [CQRS and exception handling](https://enterprisecraftsmanship.com/2019/04/15/cqrs-exception-handling/) - [Error handling: Exception or Result?](https://enterprisecraftsmanship.com/posts/error-handling-exception-or-result/) - [What is an exceptional situation in code?](https://enterprisecraftsmanship.com/posts/what-is-exceptional-situation/) - [Validation and DDD](https://enterprisecraftsmanship.com/2016/09/13/validation-and-ddd/) - [Cool validation with FluentValidation](https://www.code4it.dev/blog/fluentvalidation) - [Validation inside or outside entities?](https://lostechies.com/jimmybogard/2016/04/29/validation-inside-or-outside-entities/) - [Custom Validation in ASP.NET Web API with FluentValidation](https://exceptionnotfound.net/custom-validation-in-asp-net-web-api-with-fluentvalidation/) - [CQRS Validation Pipeline with MediatR and FluentValidation](https://code-maze.com/cqrs-mediatr-fluentvalidation/) - [Exception Handling in ASP.NET Web API - A Guided Tour](https://exceptionnotfound.net/the-asp-net-web-api-exception-handling-pipeline-a-guided-tour/) - [Scaffold Your Clean DDD Web Application - Part 4: Global Exception Handling in ASP.NET Core and Angular](https://blog.jacobsdata.com/2020/11/12/scaffold-your-clean-ddd-web-application-part-4-global-exception-handling-in-aspnet-core-and-angular) - [Advanced error handling techniques](https://enterprisecraftsmanship.com/posts/advanced-error-handling-techniques/) - [Combining ASP.NET Core validation attributes with Value Objects](https://enterprisecraftsmanship.com/posts/combining-asp-net-core-attributes-with-value-objects/) - [Always-Valid Domain Model](https://enterprisecraftsmanship.com/posts/always-valid-domain-model/) - [eShopOnWeb Architecture (3/16) – uses custom exceptions to more explicitly express what has gone wrong](https://davecallan.com/eshoponweb-architecture-3-16-uses-custom-exceptions-to-more-explicitly-express-what-has-gone-wrong/) - [How to validate business logic](https://event-driven.io/en/how_to_validate_business_logic/) ⭐ - [Explicit validation in C# just got simpler!](https://event-driven.io/en/explicit_validation_in_csharp_just_got_simpler/) ⭐ - [Notes about C# records and Nullable Reference Types](https://event-driven.io/en/notes_about_csharp_records_and_nullable_reference_types/) ⭐ - [Exploring Advanced Error Handling Patterns with Event Driven Architecture Part I](https://medium.com/ssense-tech/exploring-advanced-error-handling-patterns-with-event-driven-architecture-part-i-e2f37741d904) - [DDD: Business Logic & Exceptions in Entities](https://mbarkt3sto.hashnode.dev/ddd-business-logic-exceptions-in-entities) ## 📦 Libraries - [ardalis/GuardClauses](https://github.com/ardalis/GuardClauses) - A simple package with guard clause extensions. - [danielwertheim/Ensure.That](https://github.com/danielwertheim/Ensure.That) - Guard clause project for .NET - [proudmonkey/AutoWrapper](https://github.com/proudmonkey/AutoWrapper) - [khellang/Middleware.ProblemDetails](https://github.com/khellang/Middleware/tree/master/src/ProblemDetails) - Various ASP.NET Core middleware - [ardalis/GuardClauses](https://github.com/ardalis/GuardClauses) - A simple package with guard clause extensions. - [JosephWoodward/GlobalExceptionHandlerDotNet](https://github.com/JosephWoodward/GlobalExceptionHandlerDotNet) - Exception handling as a convention in the ASP.NET Core request pipeline. - [safakgur/guard](https://github.com/safakgur/guard) - A high-performance, extensible argument validation library. - [FluentValidation/FluentValidation](https://github.com/FluentValidation/FluentValidation) - A popular .NET validation library for building strongly-typed validation rules. - [mcintyre321/OneOf](https://github.com/mcintyre321/OneOf) - Easy to use F#-like ~discriminated~ unions for C# with exhaustive compile time matching - [ardalis/Result](https://github.com/ardalis/Result) - A result abstraction that can be mapped to HTTP response codes if needed. - [altmann/FluentResults](https://github.com/altmann/FluentResults) - A generalised Result object implementation for .NET/C#