Поиск в домене по управляемым таблицам и хранилище категорий - PullRequest
0 голосов
/ 15 октября 2018

У меня есть две таблицы, Product и ProductCategory в базе данных.

У продукта есть отдельные предметы, такие как телевизор, книга, еда.ProductCategory имеет соответствующие категории: электроника, офис, продуктовый магазин и т. Д.

В DDD мой код будет выделять все (весь совокупный корень), а продукт и категория продукта будут в одном объединенном корне?

Если они находятся в одном репозитории, будут ли GetAllProduct и GetAllProductCategory двумя разными методами в одном репозитории?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Каждый репозиторий должен содержать только агрегаты одного типа.

Вы должны проектировать свои агрегаты на основе ограниченного контекста и бизнес-инвариантов, а не таблиц и баз данных.

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

Из того, что я видел до сих пор в wild и, что более важно, из того, что я сейчас из вашего бизнеса(почти ничего!), я бы сказал, что Product и ProductCategory - это отдельные агрегаты, поэтому они должны оставаться в разных хранилищах.Но чтобы дать вам четкий ответ, мне нужно знать, каковы бизнес-инварианты.

0 голосов
/ 15 октября 2018

Должно быть два независимых репозитория для обработки взаимодействия с базой данных для Product и ProductCategory, чтобы следовать принципу единой ответственности.

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

...