Dependency Inversion Principal

DIP - принцип инверсии зависимостей, описанный Робертом Мартином. Принцип говорит о том, что архитектор системы может изменить направление зависимости от процедурного - когда большее зависит от меньшего на противополложное когда меньшее зависит от большего. Большее - это higher policy (бизнес логика) и от потребностей бизнес логики зависят плагины конкретных систем, например плагин работы с БД, обеспечивающий нашу бизнес логику данными из БД.

Библиотека Patron - это реализация DIP принципа. Ваша бизнес логика может зависеть от интерфейсов SourceType или GuestType или ActionType . Эти общие интерфейсы позволяют либо получить данные(SourceType) либо принять того кому данные нужно передать(GuestType) либо принять объект который умеет делать действия(ActionType)

Схема 1. Пример приложения с DIP + Patron

 

Как видно из схемы 1 все классы зависят только от интерфейсов из библиотеки Patron, только дополняя параметры дженериков нужными типами.

Прикладной код может выглядеть следующим образом, как показано в примере 1.

Пример 1.

// Условный код, для демонстрации композиции классов схемы 1
const credentials = new CredentialsFromPostRequest(request);

const user = new UserStatus(
    new SQLUserOfCredentials(credentials)
);

const card = new UserCard();
user.value(card);

Выгода использования Patron - хорошо видна, каждый класс не зависит ни от чего кроме библиотеки Patron и тех библиотек плагином которых является, а в случае класса бизнес - логики зависимость будет только от Patron.