Як ви зазвичай підходите до питань перехідної залежності, які виникають під час роботи у великих програмних проектах?
Останні три тижні я намагався запустити компонент великої частини програмного забезпечення в іншому компоненті програмного забезпечення, але він періодично вмирає через проблеми перехідної залежності, які відомі лише під час виконання.
Під питаннями перехідної залежності я маю на увазі, що певні залежності залежностей певного проекту стикаються з іншими залежностями під час виконання, викликаючи нестабільність або миттєвий збій.
Існує сотні, на сотні використовуваних залежностей, і є приблизно 50 підпроектів, пов'язаних з інструментом, над якими працюють окремо інші команди, де всі модулі мають глибоко вкладені залежності між собою. Ніхто не знає, для чого використовуються всі підпроекти, враховуючи масштаби та складність проекту.
У цій ситуації ви спробуєте створити візуальне подання DAG для кожної із залежних компонентів та спробуйте визначити, де можуть зіткнутися під час виконання? Я не маю контролю над тим, як управляти залежностями в інших підпроектах, і не можу змінити жоден код Java, написаний іншими розробниками.
Рішення, які я придумав, працюють лише годину-дві, а потім вони перестають працювати через зміни компонентів вище. Прикладом верхнього компонента є артефакт, від якого залежить проект, над яким я працюю, і який будується на більш ранньому етапі трубопроводу КІ.
На прохання інших людей я збираюся включити інформацію про те, які технології використовуються, ризикуючи закрити питання про надання занадто багато інформації або надто тривалий час:
- Maven використовується для управління залежностями; і
- Весна використовується як контейнер DI;
- Більшість питань залежності пов'язані з перекриттями контекстів квасолі внаслідок завантаження контекстів інших модулів під час виконання
- Продукт працює належним чином, і є тестові позначення одиничних тестів та інтеграційних тестів, щоб уникнути функціональної коректності програми
Взагалі я шукаю мовно-агностичний підхід до визначення способів вирішення конфліктів залежностей, не перераховуючи всі можливі комбінації залежностей даного проекту.
Я не можу реконструювати проект, додавати додаткові гарантії якості, наполягати на зміні парадигми в компанії чи перемиканні мов як резолюція.