В настоящее время у меня есть веб-приложение с 3 интерфейсами (в зависимости от того, на какой URL вы переходите), которое разделяет очень мало кода между 3 интерфейсами. Моя структура каталогов выглядит так:
\app1
\includes
\html
\app2
\includes
\html
\app3
\includes
\html
\crons
\libs
\logs
\setup
\db
\shared
\globalFunctions
\oldAPI
\oldClasses
Папки приложений представляют собой отдельные интерфейсы со своими собственными включениями и корневыми документами в HTML-коде. Crons предназначен только для работы с интерфейсом командной строки, библиотеки - это более новые библиотеки PHP5, такие как новый код, который мы пишем, и такие вещи, как Zend Framework. Журналы - это журналы приложений, настройка - это информация о настройке для развертывания, а общая - это старая кодовая база PHP4, на которую все еще полагается часть кода. Все хранится в одном большом репозитории SVN.
Что было бы разумным способом разбить это, чтобы я мог превратить этот большой проект SVN в более мелкие, чтобы упростить ветвление и слияние? В любом случае большинство проектов сосредоточено на одном приложении, поэтому редко приходится обновлять код в нескольких местах.
Или лучше сохранить эту текущую структуру и просто продолжать портировать код PHP4 в OO PHP5 и, естественно, отказаться от этого?






Вы должны спросить себя, какую ценность я получу при разделении этого приложения и во сколько это мне будет стоить. Затем, если вы все еще хотите это сделать, подумайте о том, что разбиение большого приложения на более мелкие - это особенность и как добавление ненужных функций хуже, чем отсутствие необходимых функций. Это подпадает под разработку программного обеспечения ТОЩИЙ.
Вот что бы я сделал. Я бы взял ваш общий код и превратил его в библиотеку. Эта библиотека должна быть задокументирована и рассматриваться как собственный проект. Я бы также создал отдельные сценарии развертывания для каждого приложения и главный сценарий развертывания, чтобы развернуть их все сразу.
\app1
\docs
\includes
\html
\logs
\setup
\deploy
\db
\app2
\docs
\includes
\html
\logs
\setup
\deploy
\db
\app3
\docs
\includes
\html
\logs
\setup
\deploy
\db
\crons
\deploy
\docs
\apps123
\libs
\newSharedLibName
\docs
\globalFunctions
\oldAPI
\oldClasses
\zend
\etc ...
Я оставил cron в покое, так как не уверен, что вы с ним делаете.
p.s. Разделить приложение на более мелкие части всегда сложнее, чем вы думаете.
Вы можете разделить его на четыре проекта SVN - по одному для каждого из трех приложений, а четвертый - для остальной части кода. Затем вы можете определить этот общий код как внешний для каждого из отдельных приложений, чтобы они могли работать как автономная проверка.
Это дает вам отдельные проекты, но имеет свой собственный набор проблем - в основном, если вы обновляете общий раздел для одного приложения, вам нужно провести регрессионное тестирование двух других, чтобы убедиться, что вы не нарушили никаких зависимостей.
Это, вероятно, больше хлопот, чем стоит, но все зависит от того, как вы работаете.
Я согласен, использование svn: externals для внутренних - хороший вариант.