У меня большой Java-проект, и мы используем maven для нашего цикла сборки. Этот один проект широко используется - в других проектах, в различных приложениях, некоторые из которых содержатся в нем, а некоторые в другом месте ... Честно говоря, это немного беспорядок (различные биты добавляются в разное время для конкретного цели), и я хотел бы немного очистить его. Кроме того, он не полностью протестирован (было добавлено много битов без надлежащего модульного и интеграционного тестирования), и есть некоторые тесты, которые выполняются долго или не проходят ... (э-э-э) - так тесты отключаются в цикле сборки maven (опять-таки)
Я думаю о том, чтобы разделить этот большой проект на более мелкие конкретные проекты, чтобы «окончательный» подпроект (или несколько подпроектов) подобрал различные подпроекты, в которых он нуждался.
Мое мышление заключается в следующем:
- если я разделю большой проект на различные подпроекты, это прояснит, какова ответственность каждого проекта.
- разделив его на подпроекты, я могу очистить тестирование каждого подпроекта в отдельности и включить тестирование для этого подпроекта в цикле сборки maven.
Я немного обеспокоен тем, какое влияние это может оказать на время сборки.
- Замедляет ли компиляция структуру большого проекта (т. Е. Меньших подпроектов)?
Кроме того, у меня есть небольшое беспокойство о том, как это может повлиять на время редактирования в IDE (в основном мы используем Intellij). Кажется, что Intellij строит каждый проект по очереди через дерево зависимостей - то есть, если C зависит от B, зависит от A, и я меняю A, он не будет пытаться построить B, пока A не скомпилируется, и так далее. Возможно, это выгодно, но я обнаружил, что если - например, я меняю интерфейс в A, который широко используется в B и C, потребуется некоторое время, чтобы исправить все ошибки этого изменения ...
Другой вопрос, как использовать фабричные классы. Некоторые аспекты проекта зависят от внешних банок. Иногда (к счастью, не часто) они обновляются, и нам приходится мигрировать. Мы стремимся справиться с этим, используя класс Factory, который указывает на правильные версии внешнего кода (поэтому нам не нужно менять все реализации во всей базе кода).
На данный момент это все в большом проекте, но я думаю, что переключившись на подпроекты, я мог бы разработать новый проект для реализации нового внешнего кода, убедиться, что подпроект полностью функционален и протестирован, и затем переключите класс зависимостей / фабрики в пользовательском проекте. Однако это усложняется из-за широкого использования интерфейсов в большом проекте. Например
- подпроект A - содержит интерфейсы
- подпроект B - зависит от A для интерфейсов и старого внешнего фляги
- подпроект C - зависит от B (и, следовательно, A и старого внешнего jar), и содержит класс Factory, который использует реализации интерфейсов B
Если мне нужно изменить внешний сосуд B, я могу:
- создать подпроект B_ii - снова зависит от A, и теперь новый внешний jar
- как только он станет полностью функциональным, я могу добавить зависимость C к B_ii и изменить класс Factory, чтобы использовать новые реализации интерфейсов.
когда все это работает, я могу удалить зависимость C от исходного B и, если необходимо, удалить подпроект B.
Это разумный способ сделать это?
Итак, в общем, мои вопросы:
- У кого-нибудь есть опыт разрушения крупных проектов? Есть ли какие-нибудь советы / хитрости, которыми вы бы хотели поделиться?
- Какое влияние это оказало на ваше развитие и время сборки?
- Какой совет вы могли бы предложить при структурировании такого разделения такого проекта?