This article will be updated as and when new issues with the course are brought to my attention or I realise a better way of doing things.
Dependency Inversion Principle
Whilst the way that I’ve implemented the interfaces and their concrete implementations works. One approach that could have improved the design would have been to define the interfaces within the packages that need them and follow the dependency inversion principle.
This helps to keep the interfaces small and allows for easier mocking.