Applying S.O.L.I.D. Principles in .NET C# May 18, 2019 dotnetprogrammingsoftware architecturesoftware engineeringweb development