Приложение - шестиугольник: внутри логика, снаружи адаптеры. Порты - интерфейсы (входящие: API, CLI; исходящие: репозиторий, внешний сервис). Адаптеры реализуют порты. Домен не зависит от способа вызова и от конкретной БД/сервиса.
// Порт (исходящий)
interface PaymentGateway { function charge(Order $order): void; }
// Адаптер
class StripePaymentAdapter implements PaymentGateway { ... }