Port
Defines one job that the Application wishes to delegate to someone else.
Details
The Application performs one or more jobs for others, and delegates all the other jobs that it needs done. Each job is delegated through a Port.
The Port defines how the Application wants to think about the job. It shouldn’t reflect the full complexity of that job. The primary purpose of the Port is to simplify the interaction to the absolute minimum needed by this one Application.
The Port should not expose any concepts from any Supplier used to implement it. The Port should be equally implementable using any Supplier capable of doing the job, or even no Supplier at all.
Implementation
A Port generally consists of one or more interfaces and 0 or more data transfer objects. It may not contain any method implementations.
Dependencies
A Port may not depend on anything. Parts of a Port may depend on each other. They may not depend on parts of another Port.