Как обрабатывать общий код, который используется в нескольких приложениях

В наших приложениях есть код, который используется во многих приложениях. Общий доступ к коду осуществляется с помощью внешних элементов SVN (см. Вопрос Несколько приложений с общими код - как к этому подойти?). Чтобы упростить развертывание, мы создаем автономные исполняемые файлы (без DLL).

Проблема в том, что мы получаем не только фрагменты общего кода с простыми функциями, но и фрагменты кода с функциями, основанными на другом общем коде. Например.:

  • Модуль A содержит общие функции A
  • Модуль B содержит общие функции B
  • Модуль X содержит общие функции X, но требует A и B.

Во многих случаях речь идет не только о каком-то модуле, которому требуется другой модуль, но и о том, что «если у вас есть модуль A и модуль B, вам нужен модуль X, чтобы связать их функции вместе».

Поскольку мы используем внешний SVN для каждого модуля общего кода, мы получаем большой набор внешних элементов. Для множества комбинаций модулей у нас есть другие модули:

  • Если у вас есть модули A и B, вам также понадобится модуль X
  • Если у вас есть модули B и C, вам также понадобится модуль Y
  • Если у вас есть модули A и C, вам также понадобится модуль Z
  • ...

Хотя внешний вид SVN довольно ясен, его все же очень громоздко использовать:

  • Нам регулярно нужно создавать новые модули, если мы добавляем функции, которые зависят от 2 (или более) других модулей.
  • Нам необходимо регулярно менять внешний вид всех приложений, если добавляются новые модули.
  • Обновления SVN занимают все больше и больше времени

Есть ли какие-нибудь хорошие шаблоны или методы, которые можно использовать, чтобы сделать это проще (или быстрее, ...)? Например.:

  • Использование #define и #ifdef только для включения кода, который полагается на модуль A, если модуль A действительно присутствует (мы делали это 15 лет назад, но я не поклонник этого подхода)
  • Рекурсивные внешние (это существует?)
  • Что-то с DLL? (хотя это, вероятно, только усугубляет проблему)
  • ...

Есть другие предложения?


person Patrick    schedule 23.04.2012    source источник
comment
Нужен ли модулям исходный код или просто вывод сборки? Не могли бы вы создать вывод для сборки module-a-devel и вставить его в Maven, чтобы вам не приходилось использовать Subversion для всех небольших внешних обновлений?   -  person vinnyjames    schedule 24.04.2012
comment
По-разному. Часто нам нужен только результат сборки этих внешних компонентов, чтобы мы могли централизованно создать библиотеку и распространять ее. Но обратная сторона - то, что если вам нужно сделать некоторые разработки в вашем приложении, что также означает расширение общего кода, вам нужно делать свои разработки в двух разных средах. Поэтому я по-прежнему предпочитаю иметь исходный код общих модулей в каждом приложении. Спасибо за ссылку на Maven; не знал этого.   -  person Patrick    schedule 27.04.2012