Недостатки и Преимущества разделенного projects/DLLs в.NET? Сколько из них слишком много?

При условии, что ваши данные уже отсортированы, вы можете использовать:

aggregate(value ~ ID + group, df, diff)

  ID group value
1  1     A    -3
2  2     A     3
3  3     B     7
4  4     B     1

Или:

library(dplyr)
df %>%
  group_by(ID, group) %>%
  summarise(new_value = diff(value))
9
задан Jhonny D. Cano -Leftware- 27 April 2009 в 12:10
поделиться

6 ответов

Ответ на этот вопрос может быть очень длинным в отношении объема аргумента, Я думаю, что прежде всего было бы лучше сосредоточить внимание на том, что является выбором и причинами, которые сделали необходимым разделить элементы в нескольких сборках, и в целом это может быть в общем Проектирование и Расслоение и / или принятие проекта структура чистая.

1. Каковы преимущества разделения Solutions / DLL?

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

2. Каковы недостатки разделения Solutions / DLL?

Основными недостатками, как другие говорили до меня, являются: в первую очередь сложность (управление, обслуживание), затем производительность (но это другое обсуждение, это не так просто сказать)

3. Если я создам новое решение / DLL для каждого общего ресурса, не будет много решений?

Это зависит, прежде всего, от того, что я думаю, это может зависеть от выбора дизайна

4. После слишком большого количества решений (например, 40+) это будет иметь некоторые негативные последствия для производительности IDE (VS.NET 2008)?

Я не уверен в снижении производительности в IDE VS2008, но уверен, что это может повлиять на производительность. управлять одним решением из более чем 60 проектов, чем, например, 4 решения по 20 проектов в каждом. не будет много решений?

Это зависит, прежде всего, я думаю, это может зависеть от выбора дизайна

4. После слишком большого количества решений (например, 40+) это будет иметь некоторые негативные последствия для производительности IDE (VS.NET 2008)?

Я не уверен в снижении производительности в IDE VS2008, но уверен, что это может повлиять на производительность. управлять одним решением из более чем 60 проектов, чем, например, 4 решения по 20 проектов в каждом. не будет много решений?

Это зависит, прежде всего, я думаю, это может зависеть от выбора дизайна

4. После слишком большого количества решений (например, 40+) это будет иметь некоторые негативные последствия для производительности IDE (VS.NET 2008)?

Я не уверен в снижении производительности в IDE VS2008, но уверен, что это может повлиять на производительность. управлять одним решением из более чем 60 проектов, чем, например, 4 решения по 20 проектов в каждом. Должно быть ясно, что производительность VS IDE может быть снижена даже после открытия, например, 35 файлов вместе из одного или двух проектных решений.

В конце я думаю, что БОЛЬШОЕ, что я думаю, это то, что лучше " строить «именно то, что действительно нужно, чем, например, чрезмерное проектирование, поэтому, когда все становится слишком сложным для управления (для многих проектов), лучше остановиться и подумать:« все идет хорошо? »

6
ответ дан 4 December 2019 в 15:26
поделиться

Преимущества

  • Ясность цели.
  • Возможность заменить одну DLL и заставить остальную часть приложения работать, как раньше.
  • Возможность повторного использования (хотя это действительно часто переоценивают *).

Недостатки

  • Сложность в работе (просто перетасовка между 7 проектов могут быть болезненными).
  • Возможность новых типов проблем зависимости (Проект A может ссылаться на проект B или наоборот, но не на оба).
  • Множество DLL для развертывания.

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


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

3
ответ дан 4 December 2019 в 15:26
поделиться

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

         +------------> Core <------------+
         |               ^                |
         |               |                |
   Level Builder         |           Game Server
         ^               |
         |               |
         +-----------Game Client

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

1
ответ дан 4 December 2019 в 15:26
поделиться

Основными недостатками большого количества dll являются:

  • сложность (огромное количество dll для управления и развертывания)
  • производительность "fusion" (которую можно уменьшить с помощью ILMerge)

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


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

2
ответ дан 4 December 2019 в 15:26
поделиться

Я боролся с противоположностью вашей проблемы - слишком много DLL и зависимостей.

Я не знаю ответов, но вот некоторые вопросы, которые могут дать вам несколько полезных указатели.

Структурирование проектов и зависимостей больших приложений winforms в C #
Что вы делаете со ссылками при выгрузке проекта в Visual Studio?

Обратите внимание, что вы можете иметь разные пространства имен в одной и той же dll, (и наоборот , вы можете распределить пространство имен по нескольким библиотекам.)

Для моих решений с большим количеством проектов у меня в настоящее время есть настройка, в которой у меня есть настраиваемая конфигурация сборки (нажмите в выпадающем меню Debug / Release и выберите Configuration Manager ) под названием «WorkingSetOnly», где я могу выбрать компилировать или нет каждый проект в Run - это ускоряет выполнение, но сохраняет intellisense,определение и т. д. Я также использую папки решений для организации проектов в два «сегмента» - WorkingSet и другие, хотя я еще не нашел способа автоматически связать их (config и папки).

1
ответ дан 4 December 2019 в 15:26
поделиться

Проблема круговой зависимости означает:

[Lib1]

[Project1]
  [ClassA]

[Project2]
  [ClassB]

если ClassA и ClassB ссылаются друг на друга, они должны быть извлечены в Lib1 и иметь ссылки Project1 и Project2 на Lib1, потому что очень трудно сохранить Project1 и 2 в синхронизировать, не делая этого.

Это не значит, что нужно сходить с ума, и я уверен, что производительность IDE не будет большой проблемой. Если у вас более 40 проектов, значит, есть проблема с дизайном.

0
ответ дан 4 December 2019 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: