2011-01-19 4 views
6

В настоящее время я пытаюсь найти лучший способ организовать проект, над которым я сейчас работаю. Это будет SDK, который люди могут использовать.Каков наилучший способ организовать этот проект?

Однако я немного борюсь с организацией проекта. У меня есть несколько пространств имен и несколько проектов. Эти проекты объединяются в разные библиотеки DLL.

Когда я компилирую все, что я следующие узлы:

Application 
Application.Entities 
Application.DataAccess 

Однако, в этих сборках еще несколько разных пространств имен, как

Application.DataAccess.SourceProviders 
Application.DataAccess.SourceParser 

Так как вы можете видеть, что я не что очень согласуется с этим. Я не создаю другую сборку для каждого пространства имен, потому что я чувствую, что она не добавляет значения, имеющего 10 + dll.

Но у меня есть несколько вопросов об этом здесь, поэтому я могу принять решение о том, как я это сделаю.

  1. В чем преимущества использования разных сборок для разных частей приложения, вместо использования только одной DLL, содержащей ВСЕ.
  2. Это хорошая идея отделить DAL от логики, используя другой проект (cq assembly/dll).
  3. Возможно, у вас есть некоторые источники информации о организации проекта в дизайне VisualStudio или SDK.

Cheers,

Timo

ответ

7

Много это сводится к личным предпочтениям, но я возьму выстрел:

  1. Каковы преимущества использования различных сборок для различных частей приложения, в смене используя только одну DLL, содержащую ALL.

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

Сохранение размера кода для отдельных библиотек может влияет на JIT, но я не уверен в этом. Возможно, кто-то еще может звонить в.

  1. Является ли это хорошая идея, чтобы отделить DAL от логики, используя другой проект (сд сборки/DLL).

Layer видимость должна идти, как это: каждый слой может видеть все, что ниже него, но ничего выше:

UI 
Controller layer (populates the UI, interacts with the logic/business objects) 
Business objects 
DAL 
Database. 

В общем, каждый слой не должен говорить только один непосредственно под ним, и следует вызывать только непосредственно над ним.

Теперь представьте, что у вас есть набор приложений, как это:

[asp.net web site] [Winforms client] [windows service] [web service] 
     |     |      |    | 
web business objects desktop logic  service logic   | 
     |               | 
     \-------------------|--------------------/     | 
          |          | 
       generic business objects (BL)      /
          |         /
          DAL ---------------------------------- 
          | 
          SQL 

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

Возможность совместного использования кода между различными типами приложений, написанная на языке .NET, является очень и очень мощной функцией, уникальной для .NET. Веб-код может быть сохранен в собственной коллекции библиотек, так же как и код на рабочем столе и т. Д. Разделение каждого слоя на одну или несколько сборок позволяет исправлять новые проекты в любом месте в конвейере, что имеет смысл, и гарантирует, t должен включать, скажем, system.web при распространении клиентского приложения, чтобы приложение было скомпилировано.

  1. Есть ли у вас, возможно, есть некоторые источники информации о проекте организации в VisualStudio или SDK дизайна.

Я попытаюсь найти некоторые ссылки после того, как мой босс перестает уставился на меня, набрав во время встречи.

4
  1. Основное преимущество использования различных сборок для разрушения крупных проектов - разные команды или отделы могут работать на отдельных компонентах.

  2. Да. Ваша бизнес-логика должна быть отделена от вашего DAL. Это полезно по архитектурным причинам, а также для модуля & Интеграционное тестирование.

  3. Это очень субъективно и зависит от размера вашего проекта, команды, организационной структуры, бизнес-требований и т.д.

+0

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

+0

@ 2. Я также отделил свои модульные тесты от решения, и я понимаю, почему вы хотите, чтобы он был отдельным, так как я не хочу разворачивать тесты с помощью моей dll. Однако до сих пор неясно, почему вы хотите использовать DAL в другой сборке. –

+0

Это возможно только до определенной степени. Наличие 100 разработчиков в 20 командах в 5 разных странах, работающих над одним проектом, становится неуправляемым. Подумайте о размере проекта и DLL - у вас будет тысячи классов в одной DLL. –

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

  2. Обычно я использую, в основном, для детализации единичного теста и причин из №1.

  3. Я нашел this, чтобы иметь некоторое представление, хотя я не согласен со всем этим. Как и во всех TFS, я думаю, что это обычно ТОЛЬКО СЛИШКОМ.

Я думаю, что пространство имен, по существу, форма документации - с указанием пространства имен вы настраиваете ожидание того, что все члены этого пространства имен есть что-то общее.

Смежные вопросы