Adapters
The frameworks and drivers layer is where all the details go. The web is a detail. The database is a detail. We keep these things on the outside where they can do little harm.
— ©Robert C. Martin
Adapters play a crucial role in enabling the system to adhere to the fundamental principle of dependency inversion, which states that high-level modules should not depend on low-level modules but should depend on abstractions. Adapters serve as intermediaries that bridge the gap between high-level policies (core business logic encapsulated in use cases and entities) and low-level details of implementation (such as user interfaces, databases, and external APIs).
Be careful. Resist the temptation to commit the sin of knee-jerk elimination of duplication.
— ©Robert C. Martin
… when you are separating layers horizontally, you might notice that the data structure of a particular database record is very similar to structure of a particular screen view. You may be tempted to simply pass the database record up to the UI, rather than to create a view model that looks the same and copy the elements across. Be careful: This duplication is almost certainly accidental. Creating the separate view model is not a lot of effort, and it will help you keep the layers properly decoupled.
— ©Robert C. Martin1