У мене великий проект java, і ми використовуємо maven для нашого циклу збирання. Цей один проект використовується широко - в інших проектах, у різних додатках, деякі з яких містяться в ньому, а інші - в інших місцях ... Якщо чесно, це дещо безлад (різні біти додаються в різний час для конкретних цілей), і я хотів би це трохи почистити. Крім того, він не повністю перевірений (безліч належних біт додано без належного тестування блоку та інтеграції), і є деякі тести, які потребують тривалого часу або фактично не проходять ... (так-ох) - так випробування вимикаються в циклі збірки Maven (знову ж таки, о-о).
Я думаю про поділ цього великого проекту на менші конкретні проекти, таким чином, щоб «остаточний» підпроект (або кілька підпроектів) підбирав різні підпроекти, які йому знадобляться.
Моє мислення таке:
- якщо я розділяю великий проект на різні підпроекти, це дає зрозуміти, яка відповідальність кожного проекту.
- розділяючи на підпроекти, я можу потім очистити тестування кожного підпроекту окремо і включити тестування цього підпроекту в циклі збірки Maven.
Я трохи стурбований тим, який вплив це може мати на час створення.
- Чи нав'язування структури великого проекту (тобто для менших підпроектів) сповільнить компілятор?
Також у мене є невелике занепокоєння щодо того, який вплив може мати час редагування IDE (ми в основному використовуємо Intellij). Схоже, Intellij будує кожен проект по черзі через дерево залежностей - тобто, якщо C залежить від B, залежить від A, а я змінити A, він не намагатиметься побудувати B, якщо A не збирається тощо. Можливо, це вигідно, але я виявив, що якщо - наприклад, змінити інтерфейс в A, який широко використовується в B і C, потрібен певний час, щоб виправити всі помилки, пов'язані з цією зміною ...
Інше питання - як використовувати фабричні класи. Деякі аспекти проекту залежать від зовнішніх банок. Інколи (на щастя, не часто) вони оновлюються, і нам доводиться мігрувати. Ми, як правило, справляємося з цим за допомогою класу Factory, який вказує на правильні версії зовнішнього коду (тому нам не потрібно змінювати всі реалізації впродовж усієї бази коду).
Наразі це все у великому проекті, але я думаю, що, перейшовши на підпроекти, я міг би розробити новий проект для впровадження нового зовнішнього коду, переконатися, що підпроект є повністю функціональним та перевіреним, і потім переключіть залежність / заводський клас у проекті користувача. Однак це ускладнюється широким використанням інтерфейсів упродовж великого проекту. Наприклад
- підпроект A - містить інтерфейси
- підпроект B - залежить від A для інтерфейсів та старої зовнішньої банки
- підпроект C - залежить від B (і, отже, A і старої зовнішньої банки), і містить клас Factory, який використовує реалізацію інтерфейсів B
Якщо мені потрібно змінити зовнішню банку B, я можу:
- створити підпроект B_ii - знову залежить від А, а тепер і нової зовнішньої банки
- Після повноцінного функціонування я можу додати залежність C до B_ii та змінити клас Factory на використання нових реалізацій інтерфейсів.
коли це все працює, я можу потім зняти залежність C від оригіналу B і, якщо потрібно, видалити підпроект B.
Це розумний спосіб робити це?
Отже, в основному мої запитання:
- Хтось має досвід розбиття великих проектів? Чи є якісь поради / рекомендації, якими ви хотіли б поділитися?
- Який вплив це мало на ваш розвиток та час побудови?
- Яку пораду ви можете запропонувати щодо структури такого розбиття такого проекту?