Я ищу совет о том, как структурировать пространства имен в структурированном приложении CQRS.
В настоящее время сторона команды и сторона запроса находятся в одном и том же пространстве имен в каждом ограниченном контексте, но сложность растет, это начинает создавать проблемы.
В настоящее время структура имеет следующие папки, каждая из которых содержит реализацию:
Application
+ Api
+ Cli
+ Web
Domain
+ Action (Command and Command Handlers in one - we are not using a CommandBus)
+ Event
+ Model
+-- Project
|-- Project.file
|-- ProjectRepository.file
Infrastructure
+ Consumer (Projections and ProcessManagers)
+ EventStore
+ Persistance (Denormalized read side)
+-- Project
|-- SqlProjectRepository.file
Common (Supporting namespace)
Проблема заключается в том, что модель домена в настоящее время содержит обе сущности и агрегат источника событий root, который, по сути, является только частью стороны запроса и стороны команды соответственно.
Нет перекрытия в агрегатах стороны запроса и стороны команды.
При рефакторинге для разделения, где должен быть сделан срез?
Предложение 1
Полный срез, приводящий к запросу и командной стороне, что означает, что даже прикладной уровень имеет сторона чтения и записи.
Предложение 2
Срез, который создается только на слое домена, так что Каждая сторона содержит (довольно анемичные c) сущности модели чтения, а командная сторона содержит события, совокупность источников событий root и более.
Пожалуйста, сделайте 3-е предложение, если мое не применимо , Спасибо.