DIP - принцип инверсии зависимостей, описанный Робертом Мартином. Принцип говорит о том, что архитектор системы может изменить направление зависимости от процедурного - когда большее зависит от меньшего на противополложное когда меньшее зависит от большего. Большее - это higher policy (бизнес логика) и от потребностей бизнес логики зависят плагины конкретных систем, например плагин работы с БД, обеспечивающий нашу бизнес логику данными из БД.
Библиотека Patron - это реализация DIP принципа. Ваша бизнес логика может
зависеть от интерфейсов
Схема 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.