Understanding SOLID Principles for Maintainable and Extensible .NET Code