Должен ли я создавать библиотеки DLL для модульности? - PullRequest
8 голосов
/ 18 августа 2010

Я работаю над созданием приложения, которое будет анализировать статьи MSDN на предмет мета-информации, такой как заголовок статьи и другие статьи в той же коллекции.Это приложение также имеет интерфейс GUI.

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

Насколько я понимаю, вы обычно создаете библиотеки DLL для совместного использования кода в разных приложениях.Однако в этом случае я ищу модульность только для этого конкретного приложения.Это все еще уместно для создания DLL в этом случае?Или я должен рассмотреть другой вариант, например, просто объединить все классы в одну сборку?

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

Ответы [ 3 ]

7 голосов
/ 18 августа 2010

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

Кроме того, разделение его на отдельные библиотеки DLL для модульности может даже помочь в процессе проектирования и разработки. Это усложняет «совместное использование» глобальных данных (и это, вероятно, хорошо). Если все находится в одной монолитной сборке, может быть некоторая тенденция просто получить некоторые данные из другого места. Если эти данные находятся в другой сборке, вероятность такого плохого поведения менее вероятна. Это может заставить разработчика переосмыслить способы решения проблем.

1 голос
/ 18 августа 2010

Существует несколько преимуществ для создания DLL:

  • DLL может быть изменена независимо от программы вызывающей стороны (front-end)
  • DLL может распространяться самостоятельно,независимо от проблемы вызывающего абонента (front-end)
  • если несколько одновременно работающих программ используют одну и ту же DLL, объем памяти будет меньше

Это также связано со стоимостью:

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

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

Если вы хотите по-настоящему чистое сокращение модульности, вы можете использовать настоящую многоуровневую архитектуру с отдельными процессами для front-end и back- end.конец и уровень связи между ними (скажем, сокеты TCP).Это обычно более универсально и более надежно, и не намного сложнее, когда это делается достаточно рано в жизни проекта.

1 голос
/ 18 августа 2010

DLL могут помочь в обслуживании вашего приложения.Если у вас есть будущие обновления и / или исправления ошибок, вы можете обновить определенные библиотеки DLL, а не все приложение.Это также поможет уменьшить площадь тестируемой поверхности.

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

...