When developing software, we implement a dependency injection centric architecture.
Figure: A Dependency Injection based architecture gives us great maintainability
✅ Figure: Good Example - The Solution and Projects are named consistently and the Solution Folders organize the projects so that they follow the Onion Architecture
Dependencies and the application core are clearly separated as per the Onion Architecture.
In the above example you can clearly see:
Common Library projects are named [Company].[AssemblyName]. E.g. BCE.Logging is a shared project between all solutions at company BCE.
Other projects are named [Company].[Solution Name].[AssemblyName]. E.g. BCE.Sparrow.Business is the Business layer assembly for company ‘BCE’, solution ‘Sparrow’.
We have separated the unit tests, one for each project, for several reasons: