solid principles c# blog