Вопрос

Когда решение разбивается на логические слои, лучше всего использовать отдельный проект, а не просто группировать его по папке?

Это было полезно?

Решение

По умолчанию, всегда просто создавай новую папку в рамках одного проекта

  • Вы получите единственную сборку (без дополнительной гимнастики ILMerge)
  • Легче запутать (потому что у вас будет меньше общедоступных типов и методов, а в идеале вообще нет)

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

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

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

Другие советы

Разделение функций на проекты часто является оптимизацией архитектуры YAGNI.Как часто вы на самом деле повторно использовали эти отдельные проекты?Если это не частое явление, вы усложняете разработку, сборку, развертывание и обслуживание для теоретического повторного использования.

Я предпочитаю разделять проекты на папки (с использованием соответствующих пространств имен) и проводить рефакторинг для отдельных проектов, когда у вас есть реальный вариант повторного использования.

Денни написал:

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

Я с этим полностью согласен — если и можно повторно использовать, то это должно быть в отдельном проекте.С учетом вышесказанного, эффективное повторное использование также очень сложно :)

Здесь, в SO, мы постарались быть очень простыми с тремя проектами:

  • Веб-проект MVC (который по умолчанию отлично разделяет ваши слои на папки)
  • Проект базы данных для контроля версий нашей БД
  • Модульные тесты моделей/контроллеров MVC

Я не могу говорить за всех, но я доволен тем, насколько просто мы это сделали — действительно ускоряет сборку!

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

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

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

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

Разделение исходного кода на несколько проектов имеет смысл, только если вы ......Больше разработчиков вовлечено, и вы хотите относиться к их работе как на расходную черную коробку.(не очень рекомендуется) ...

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

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

Я действительно считаю, что лучше разделить проект, но все зависит от размера проекта и количества людей, работающих над ним.

Для более крупных проектов у меня есть проекты для

  • доступ к данным (модели)
  • услуги
  • внешний интерфейс
  • тесты

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

MVC-витрина

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top