Контроль источника
У нас есть 20 или 30 проектов, построенных на 4 или 5 отдельных решениях. Мы используем Subversion для SCM.
1) У нас есть одно дерево в SVN, содержащее все проекты, организованные логически по пространству имен и имени проекта. В корне есть файл .sln, который соберет их все, но это не является обязательным требованием.
2) Для каждого фактического решения у нас есть новая папка стволов в SVN с SVN: внешние ссылки на все необходимые проекты, чтобы они обновлялись из своих расположений под основным деревом.
3) В каждом решении есть файл .sln плюс несколько других необходимых файлов, а также любой код, который является уникальным для этого решения и не используется в разных решениях.
Наличие множества небольших проектов иногда доставляет немало хлопот (например, сообщения об обновлении TortoiseSVN запутываются со всеми этими внешними ссылками), но имеет огромное преимущество в том, что зависимости не могут быть круговыми, поэтому наши проекты пользовательского интерфейса зависят в проектах BO, но проекты BO не могут ссылаться на пользовательский интерфейс (и не должны!).
Архитектура
Мы полностью переключились на использование шаблона MS SCSF и CAB enterprise , чтобы управлять тем, как наши различные проекты объединяются и взаимодействуют в интерфейсе Win Forms. Я не уверен, что у вас есть одни и те же проблемы (несколько модулей должны совместно использовать пространство в общей среде форм), но если вы это сделаете, это может привести к здравому смыслу и соглашению в том, как вы разрабатываете и собираете свои решения.
Я упоминаю об этом, потому что SCSF имеет тенденцию объединять функции типа BO и UI в один модуль, тогда как ранее мы поддерживали строгую трехуровневую политику:
FW - рамочный код. Код, функция которого связана с проблемами программного обеспечения.
БО - Бизнес Объекты. Код, функция которого связана с проблемами проблемной области.
UI - код, который относится к UI.
В этом сценарии зависимости строго UI -> BO -> FW
Мы обнаружили, что можем поддерживать эту структуру даже при использовании модулей, сгенерированных SCSF, так что в мире все хорошо: -)