readmodel для доступных данных и выбранных данных - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь следовать принципам DDD и CQRS в проекте, над которым я сейчас работаю. Сейчас я борюсь с дизайнерским решением. Допустим, у меня есть страница со списком тем, на которые пользователи могут подписаться. Пользователи также видят, на какие темы он подписан. Как мне получить данные? Я запрашиваю темы и отмеченные темы отдельно.

например,

  • GetTopics
  • GetMarkedTopicsForUser

, а затем в представлении, которое я делаю маг c объединения 2, чтобы пользователи видели его подписки. Или мне сделать 1 модель, которая содержит все темы и уже пометила темы, на которые пользователь подписался

, например,

  • GetTopicOverviewForUser

Ответы [ 2 ]

1 голос
/ 10 мая 2020

Допустим, у меня есть страница со списком тем, на которые пользователи могут подписаться. Пользователи также видят, на какие темы он подписан. Как мне получить данные?

Есть несколько способов сделать это, но я бы создал две модели чтения :

  • AllTopics: список все темы
  • UserWithTopics: чтобы узнать, на какие темы подписан пользователь.

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

0 голосов
/ 10 мая 2020

Это действительно сводится к дизайнерскому решению - что вы собираетесь показать пользователям?

  1. Список всех тем и список текущей подписки
  2. Все темы и, если у пользователя есть подписка.

Если 1, вы хотите просмотр результатов ...

var resultView = new TwoResultViews(avaiableTopics, subscriptionTopics);

возвращает

"res": {
  "availableTopics": 
  [
    {
       "topic": "topic1",
    }
  ],
  "subscribedTopics": 
  [
    {
       "topic": "anotherTopic"
    }
  ]
}

или если 2

var resultView = new SingleResultView(availableTopics, susbcrtiptionTopics);

возвращает

  [
    {
       "topic": "topic1",
       "subscribed": true
    }
  ],

В любом случае, вы нужно 1 вызов API, если нет очевидных (и ответственных - иначе говоря, производительности) причин для его оптимизации.

...