# Use Case directly depends on a specific Database library (BAD) class RegisterUser: def execute(self, user_data): db = MySQLConnection() # Violates Dependency Rule db.save(user_data) You define an abstract interface inside the Use Case circle.
This is where , popularized by Robert C. Martin ("Uncle Bob") in his seminal book, comes to the rescue.
Open your current project. Find one direct call from a Controller (Web layer) to a Database (ORM layer). Insert an Interface in between. That single refactor is the first step toward Clean Architecture. Did this summary help you? If you enjoyed the post, consider buying the official "Clean Architecture: A Craftsman's Guide to Software Structure and Design" by Robert C. Martin to support the author.
def execute(self, user_data): user = User(user_data) # Entity self.repo.save(user) # Calls the interface, not the concrete DB