Поиск в домене по управляемым таблицам и хранилище категорий
У меня есть две таблицы, Product и ProductCategory в базе данных.
Продукт имеет отдельные предметы, такие как телевизор, книга, еда. Категория продукта имеет соответствующие категории: электроника, офис, продуктовый магазин и т. Д.
В DDD мой код выберет все (весь совокупный корень), и находятся ли продукт и категория продукта в одном объединенном корне?
Если они находятся в одном репозитории, будут ли GetAllProduct и GetAllProductCategory двумя разными методами в одном репозитории?
2 ответа
Должно быть два независимых репозитория для управления взаимодействием с базой данных для Product и ProductCategory, чтобы следовать принципу единой ответственности.
Я предполагаю, что у вас есть только метод Fetch для ProductCategory сегодня, но у вас может возникнуть потребность в манипулировании данными в будущем. Будет разумно хранить их в отдельном хранилище, чтобы иметь расширяемый дизайн.
Каждый репозиторий должен содержать только агрегаты одного типа.
Вы должны разрабатывать свои агрегаты, основываясь на ограниченных контекстах и бизнес-инвариантах, а не на таблицах и базах данных.
Одним из советов при проектировании агрегатов является то, что они являются самой большой транзакционной границей. То есть все, что происходит внутри агрегата, строго согласовано. Кроме того, это означает, что транзакция не должна охватывать несколько агрегатов. Если вам это нужно, то это означает, что вы неправильно разработали свои агрегаты.
Из того, что я видел до сих пор в дикой природе и, что более важно, из того, что я сейчас из вашего бизнеса (почти ничего!), Я бы сказал, что Product
а также ProductCategory
являются отдельными агрегатами, поэтому они должны оставаться в разных хранилищах. Но чтобы дать вам четкий ответ, мне нужно знать, каковы бизнес-инварианты.