I agree. I believe that following these rules will lead you to following the Dependency Inversion Principle, particularly the one about injecting dependencies into methods or the constructor. If you do this and remove duplication mercilessly, you'll (re)discover DIP.