Hands-On Design Patterns with C# and .NET Core: Write clean and maintainable code by using reusable solutions to common software design problemsGaurav Aroraa