В компании, в которой я сейчас работаю, мы поддерживаем 4 приложения Windows, которые несколько связаны. Для каждого приложения у нас есть решение, каждое из которых составляет от 50 до 100 проектов. Есть, вероятно, 40 или 50 проектов, которые разделяются между одним или несколькими решениями.
Просто для того, чтобы дать вам представление, более крупное решение имеет почти 90 проектов, 20 из которых являются проектами пользовательского интерфейса (основное приложение, проекты пользовательских элементов управления, вспомогательные проекты UI), еще 20 - это проекты бизнес-уровня, возможно, 30 или 40 данных Проекты уровня доступа, а остальные - проекты Windows и специализированные проекты
Я всегда чувствовал, что в каждом решении слишком много проектов. Конечно, речь идет о больших приложениях, но я не понимаю, почему многие из проектов не могли быть консолидированы. В моей предыдущей компании у нас на самом деле был один проект для бизнес-уровня, один проект для DAL и, очевидно, один проект для каждого окна или веб-приложения.
Вот некоторые из проблем, с которыми я столкнулся из-за большого количества проектов:
- Большое время компиляции.
- Классы, которые обычно должны быть Private, должны быть общедоступными, чтобы быть доступными другими проектами на одном уровне.
- Недавно я начал использовать профилировщик Eqateq. Пробная версия позволяет профилировать до 10 DLL. Моя ситуация явно затрудняет использование этого приложения.
- Отслеживание ссылок между проектами довольно сложно. Я уверен, что существует много неиспользуемых ссылок между проектами.
Напротив, я не нашел преимущества этой ситуации.
Итак, мои вопросы:
- Когда вы решили создать новый проект, а не просто создать папку в текущем проекте?
- Есть ли какие-то преимущества, которые я пропускаю?
UPDATE:
Имейте в виду, что я не предлагаю ни одного проекта для всего. На минимальном уровне должен быть один проект для DAL, один для BL и один для каждого приложения пользовательского интерфейса. И я понимаю, что это нереально для большинства приложений. Я пытаюсь понять, каковы наилучшие методы определения уровня "единой ответственности" за сборку? Я имею в виду, что это очень субъективный вопрос, который, если его принять до крайности, приведет к созданию одной сборки для каждого класса.
ОБНОВЛЕНИЕ 2:
Все три ответа предоставили ценную информацию, но поскольку я могу выбрать только один, я выбираю Doc для его комментария о том, как определить количество проектов DAL. Я также связываюсь с другими вопросами, которые я только что нашел, которые имеют следующую информацию: здесь и здесь. Я также рекомендую читать эту статью.