Комментарии 18
А нельзя просто ввести версионность у компонента? Тогда при новом релизе вашей системы/приложения вы прост используете необходимую версию компонента и нет необходимости ничего модифицировать, если речь не идёт о закрытии уязвимостей и т.п.
Используйте изолирующий слой и другие техники для удаления зависимости разрабатываемого ПО от изменений используемых компонентов и от проприетарных интерфейсов.
Ну вот, про самое важное ничего и не написано.
Изолирующий слой — это что? Как быть, если сама библиотека содержит баги?
Недавний пример из мира Java: Jersey 1.x содержит внутри себя JAX-RS 1.0 классы, которые конфликтуют с JAX-RS 2.0 классами из других библиотек. Как тут не пиши изолирующий слой, если оно все внутри одного процесса запущено, конфликта не избежать.
Ну, можно попытаться загружать их в разных загрузчиках классов…
Например, можно использовать паттерн Стратегия, который будет выдавать реализацию посредника исходя из версии используемой сторонней библиотеки. Конкретный посредник будет учитывать баги и особенности конкретной версии сторонней библиотеки.
Некоторые вещи не решаются только на уровне языка, к сожалению. Иногда необходимо вносить изменения в исходный код (в случае багов) или же, к примеру, перепаковывать библиотеку.
Но, думаю, в статье больше велась речь про непосредственное использование Vendor API из приложения.
Тут я полностью согласен про изолирующие слои.
Но, думаю, в статье больше велась речь про непосредственное использование Vendor API из приложения.
Тут я полностью согласен про изолирующие слои.
Это антипаттерн, только когда люди подписываются на подобное, не понимая стоимости сопровождения. Иметь несколько патчей на апстрим, которые форвард-портятся по мере выхода новых версий — совершенно нормальная практика, если она осознаётся как требующая периодического внимания.
Весьма часто патчи тривиальны, и если у кода хорошее покрытие тестами форвард-порт патчей занимает разумное время и даёт разумную уверенность в устойчивости и работоспособности решения.
Весьма часто патчи тривиальны, и если у кода хорошее покрытие тестами форвард-порт патчей занимает разумное время и даёт разумную уверенность в устойчивости и работоспособности решения.
НЛО прилетело и опубликовало эту надпись здесь
В последнее время я для себя решил эту проблему банально через пулл реквесты авторам, если меня что-то не устраивает в коде их проекта. Даже если режектнут — я свой форк всегда могу держать в живом состоянии.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Антипаттерны проектирования: Dead End