solid principles c# kudvenkat