Откуда берутся объекты-ценности в DDD?
В настоящее время я работаю над сайд-проектом, чтобы почувствовать DDD, и мне интересно, что будет компонентом репозитория, из которого можно получить мои объекты-ценности.
В моем ограниченном контексте рынка каталог управляется продавцом и содержит предложения, организованные по категориям и вселенным
здесь я предполагаю, что Merchant, Catalog и Universe были бы Агрегированными Корнями, потому что они имеют глобальную идентичность в системе, тогда как Offer был бы Агрегатом Каталога, а Category был бы Объектом Значения, действующим как тег на предложениях.
Тогда у меня были бы хранилища, которые бы служили фасадом постоянства для AR, но я не понимаю, как в отношении строительных блоков DDD я должен иметь дело с поиском категорий (продавец должен иметь возможность определять категории внутри его каталог, а затем использовать их, чтобы пометить предложения, которые он добавляет к нему).
Кто-нибудь может дать какое-нибудь руководство?
Спасибо
1 ответ
Как вы указали, объекты-значения не являются сущностями и, следовательно, не должны напрямую извлекаться из хранилища. Это, однако, аспекты / свойства объекта.
Когда вы хотите сослаться на все Categories
из Catalog
вы, в принципе, выполняете запрос к Catalog
; который Categories
вы содержите?
Поскольку оба Categories
и Catalog
являются агрегированными корнями, вам может потребоваться использовать доменную службу (она существует, помимо прочего, для выполнения кросс-агрегированных операций).
Это может привести к следующему коду:
class CategoryListingService
{
public ICollection<Category> GetCategoriesForCatalog(Catalog catalog)
{
var offers = offerRepository.GetAllOffersFrom(catalog)
var categories = offers.Select(o => o.Category).Distinct();
return categories;
}
}
Обратите внимание, что это пример кода в C#, но идея, лежащая в его основе, должна работать и позволять вам перечислять все категории предложений, которые присутствуют в каталоге.