Откуда берутся объекты-ценности в 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#, но идея, лежащая в его основе, должна работать и позволять вам перечислять все категории предложений, которые присутствуют в каталоге.

Другие вопросы по тегам