Подтвердить что ты не робот

Что лучше, много мелких сборок или одна большая сборка?

Все в заголовке:)

В настоящее время у нас есть решение VS2005 с 20+ проектами. Как

MySolution
MySolution.Modules.Foo
MySolution.Modules.Bar
[insert many here]
MySolution.Modules.Baz

Может ли быть вред для "слияния" MySolution.Modules. * в одном проекте? Все пространства имен будут сохранены, поэтому здесь нет проблем.

Но есть ли что-нибудь, о чем я не думал?

Примечание. В настоящее время не может быть круговых ссылок: если MySolution.Modules.Foo ссылается на MySolution.Modules.Bar, MySolution.Modules.Bar не может ссылаться на MySolution.Modules.Foo. Поэтому мы должны быть осторожны, чтобы не создавать.

4b9b3361

Ответ 1

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

Подумайте о проекте как о единице повторного использования, среди прочего. Будет ли какой-нибудь продукт нуждаться в Foo, но не в баре, или наоборот? Если нет, объедините их вместе.

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

О, и, конечно же, держите тесты в другом проекте с вашим производственным кодом:)

Ответ 2

Преимущества одной сборки:

  • потенциально перформативный
  • потенциально простое развертывание

Преимущества многих сборок:

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

Ответ 3

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

Например, у нас есть много объектов данных для записей и представлений, распространенных по нескольким ассамблеям, MJ.DE.views.dll, MJ.DE.tables.dll, MJ.DE.sprocs.dll и т.д., но в в конце мы используем ILMerge, чтобы связать их вместе в один MJ.DE.DLL. - упрощает обновление/синхронизацию приложения, так как на производственном сервере меньше скриптов piecesto, и мы знаем, что все связанные классы связаны с одним и тем же компилятором.

Ответ 4

С одной стороны, Visual Studio начинает все больше и больше загружать ваше решение, если у вас много проектов, в отличие от нескольких проектов с тоннами кода.

Это не обязательно хорошая причина просто иметь один проект над всеми остальными, упомянутыми здесь, но что-то иметь в виду.

Ответ 5

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