Несколько приложений с общим кодом - как к этому подойти? - PullRequest
4 голосов
/ 16 апреля 2009

В моей компании есть два или три веб-приложения, в которых используется много общего кода - настраиваемая среда MVC, служебные классы, библиотеки JavaScript и т. Д.

Мы бы предпочли не дублировать весь этот код в каждом приложении, потому что мы используем несколько несколько разных его версий. Но мы не хотим, чтобы приложения требовали одинаковую точную копию этого кода, потому что мы не хотим, чтобы обновление одного приложения могло потенциально сломать другое.

У кого-нибудь есть советы по решению этой проблемы? Я не думаю, что я ищу технический ответ - больше, чем просто общий подход.

Мы могли бы превратить код в библиотеку и позволить приложениям оставаться в более старой версии библиотеки, пока они не будут готовы к обновлению. Или мы можем сделать это в несколько библиотек, поэтому нам не нужно обновлять все сразу. Но станет ли трудно управлять взаимозависимостями между версиями библиотек?

Ответы [ 4 ]

5 голосов
/ 16 апреля 2009

Я использую SVN с svn: externals. Вещи, которые вы хотите быть стабильными, должны быть в папке тегов, чтобы другие проекты в стволе не влияли на зависимые проекты.

0 голосов
/ 16 апреля 2009

Я бы создал одну ветку управления исходным кодом для общего кода, представляющего самую последнюю и лучшую версию.

Тогда для каждого проекта есть своя независимая ветвь этого кода, в которой вы можете быстро исправить ошибки, если это необходимо, или иметь стабильность в непосредственной близости от выпуска.

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

Для этого хорошо подойдет Git, так как он хорошо подходит для объединения изменений в ветку 'master'.

0 голосов
/ 16 апреля 2009

Я второй SVN с svn: externals. У нас есть клиент и сервер, которые совместно используют некоторый код. Код поддерживается на сервере (но может быть перемещен в собственное хранилище), и клиент извлекает его с помощью svn: externals. Клиентская транк тянет из транка сервера. Но когда мы разветвляемся (скажем, для выпуска), тогда мы привязываем потянутое внешнее к определенной версии, ветви или тегу. Если вы этого не сделаете и вернетесь к старой ветке с обновлением, вы можете получить транк общего кода, что, скорее всего, не то, что вам нужно.

0 голосов
/ 16 апреля 2009

Это зависит от многих факторов - разные языки по-разному относятся к библиотекам. Обычно я справляюсь с этим, чтобы у каждого приложения была батарея тестов на наличие внешних зависимостей, включая библиотеки, которые я написал, и чтобы это позволяло обновлениям этих библиотек не нарушать работу приложения.

Есть еще какие-нибудь подробности относительно платформы, которую вы используете? Там могут быть специальные инструменты, которые помогут с вашими конкретными потребностями.

...