How to develop .NET applications using SOLID principles