DDD, абстрактный класс, агрегаты и репозиторий, один или несколько репозиториев? - PullRequest
0 голосов
/ 17 января 2019

Мышление в хранилище и совокупность . В литературе говорится, что на один агрегат приходится одно хранилище.

Однако, если все мои агрегаты являются подклассами базового (отношение is-a, наследование не используется для повторного использования). Нужно ли создавать репозиторий для всех подклассов или я могу использовать один репозиторий для всех.

PaperBag paperBag = paperBagsRepository.get(paperBagId);
PlasticBag plasticBag = plasticBagsRepository.get(plasticBagId);

Или

PaperBag paperBag = bagsRepository.get(paperBagId);
PlasticBag plasticBag = bagsRepository.get(plasticBagId);

Ответы [ 2 ]

0 голосов
/ 19 января 2019

В таком случае я задам себе эти вопросы -

  1. Они представляют отдельные транзакции?
  2. Будут ли происходящие события различаться в зависимости от типа?

Ответ на первый вопрос сам по себе часто приводит к разумному составлению совокупности.

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

0 голосов
/ 17 января 2019

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

См. Парнас, 1972 .

Так что в коде клиента этот стиль предпочтителен:

PaperBag paperBag = paperBagsRepository.get(paperBagId);
PlasticBag plasticBag = plasticBagsRepository.get(plasticBagId);

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

...