2

Я занимаюсь разработкой C# приложения следующего DDD и концепции Луковых архитектур, но я не могу понять, как отделить код:Visual Studio - DDD модули и лук

  1. Я хочу это отделило модули -ограниченного contexts- (то есть продажи; поставщики; клиенты)
  2. и я хочу его разделенным слои (т.е. ядро, услуги)

он приходит на ум, выполнив следующие действия: один проект на один слой и одну папки (с уникальным пространством имен) на модуль. Например:

проекта Основные

  • Папка продажи
  • папки Поставщики
  • Клиентов Папки

Услуга проект

  • Папка продажи
  • папки Поставщики
  • Клиенты Папка

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

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

спасибо.

+0

Границы разделения действительно определяются взаимозаменяемостью. Есть элементы «Продажи» и «Клиенты», которые разделяются, например, например, сам клиент. Обычно, когда я подхожу к DDD-проектам, я не беспокоюсь об этих жестких границах в начале и организую, когда я иду. Концепции DDD состоят в том, чтобы продвигать гибкость в отношении изменений, поэтому она играет в повествование о цели, так сказать. – MutantNinjaCodeMonkey

+0

Итак, вы начинаете с создания уникальной модели, а затем итеративно рефинирируете и разделяете ее только тогда, когда это необходимо? – Franco

+2

Да. В точку. DDD очень спроектирован так, чтобы быть итеративным в своем подходе. Шансы вы ударить его из парка в первый раз довольно тонкие. Не обязательно потому, что вы не правильно моделировали, а потому, что вы будете изучать вещи от тех, которые поставляют спецификации, которые меняют силу, когда вы идете. – MutantNinjaCodeMonkey

ответ

4

Один из подходов, который хорошо работает в VS является следующее:

  • Создание одного проекта для каждого модуля. Это естественный подход, потому что у вас есть явные зависимости между проектами.
  • Используйте Пакеты решений, чтобы сгруппировать проекты в слои. Вы можете префикс слоя с номером, чтобы он отображался в пределах визуальной студии. Обратите внимание, что папки решений являются виртуальными, то есть не видны в файловой системе, но это обычно не вызывает беспокойства.
+0

Итак, у вас есть, например, Core/Sales, Core/Suppliers, Application/Sales, Application/Suppliers, Infralete Structure/Sales, Infralete Structure/Suppliers? – Franco

+0

@Franco Если 'Продажи' и' Поставщики' являются разными БК (что я предполагаю на основе вашего вопроса), то это хорошая структура. Однако, если они являются отдельными приложениями (интерфейсами) для одного и того же BC, то создайте единый доменный модуль. Кроме того, инфраструктура, вероятно, будет одним модулем в этом случае. – theDmi

+0

Я отредактировал вопрос, чтобы уточнить, что модули BC, спасибо. Мне нравится ваш подход, но не будет много сборок во всем решении? Я не знаю, есть ли в настоящее время настоящая проблема. – Franco

3

На основе последнего проекта DDD я сделал я пришел к следующему:

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

  • папки Используйте решение для разделения слоев, (как упоминалось theDmi)

  • Start с 1 проекта в каждом слое и рефакторинг по мере необходимости. Предполагая какую-то гибкость в вашем подходе, вам не нужно заранее планировать всю структуру проекта. Так же, как вы можете реорганизовать классы, проекты рефакторинга.Учитывайте следующее:

1) Имеет ли проект свой разум, чтобы существовать. Например, у автомобиля есть причина для существования, я могу купить его, заменить один и т. Д. У части двигателя нет причин существовать на своем собственном. Я никогда не покупаю его, если у меня нет подходящего автомобиля.

2) Избегайте предупреждения «Слишком мало классов в этом пространстве имен» из анализа кода. Если у меня есть только несколько типов автомобилей внутри каждой марки (и не имеют дело со многими отдельными частями автомобиля), поместите весь бренд в единый проект

3) Рассматривает ли иерархию одного проекта в пределах экрана (или 2) в вашем браузере решений. Как только вы начинаете поиск значков, которые, как вы знаете, существуют в рамках проекта, тогда рассмотрите разделение проекта. Например, автомобили могут быть разделены брендом.

Пусть сложность вашего решения будет возрастать по мере роста вашего проекта. Хотя я видел решения с проектом 100, я редко видел, как он работает. То же самое касается проектов с более чем 100 (может быть, немного больше для проектов) классов.

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

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

+0

Мне понравилась ваша марка и аналогий автомобилей. Я буду иметь в виду анализ кода. – Franco