If business logic creates its own database or email class with new, you cannot swap the database or test the logic without editing it. DIP says high-level code should depend on interfaces, and the details plug in from outside. Use it for anything that talks to a DB, HTTP service or message sender, such as an OrderService that needs a repository. Do not confuse it with dependency injection, which is just one common way to apply it.