Является ли хорошей идеей моделировать ключевые слова в качестве объекта значения в совокупности продуктов? - PullRequest
0 голосов
/ 20 октября 2018

У меня есть совокупность продуктов, в которой есть несколько ключевых слов для поиска товаров.Я смоделировал это следующим образом:

public class Product : Entity<Guid,Product> , IAggregateRoot
{
    public Guid AccountId { get; protected set; }

    public string Title { get; protected set; }

    public DateTimeOffset AddingDate { get; protected set; }

    public decimal Price { get; protected set; }

    public string Brand { get; protected set; }

    public string Description { get; protected set; }

    public IList<Keyword> Keywords { get; protected set; }
}

public class Keyword : ValueObject<Keyword> 
{
    public Keyword(string title) 
    {
        this.Title = title;
    }

    public string Title { get; protected set; }
 }

В зависимости от сущность-значение-объект-окончательный-список-различий Объекты-значения имеют несколько характеристик:

1.Два объекта значений считаются равными, если они имеют одинаковые значения атрибутов.
2. Значения объектов имеют нулевой срок службы.
3. Объекты значения неизменны.

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

Поэтому я собираюсь смоделировать ключевое слово как объект значения, потому что мне все равноо его идентичности (будь то автоматически сгенерированное целое число или Guid) и о том, чтобы пометить два ключевых слова как равные по их атрибуту (который находится здесь в заголовке).

Мой вопрос: должен ли я моделировать ключевое слово как объект значения или сущность в зависимости отсценарий выше и почему?

Редактировать:

В зависимости от статьи, которую я предоставил выше:

Не вводить отдельные таблицы дляобъект стоимостиs, просто вставьте их в таблицу родительской сущности.

Ключевое слово следует рассматривать как сущность (но я думаю, что модели домена и базы данных не должны зависеть друг от друга)

Ответы [ 2 ]

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

Вы можете определить предикаты в качестве аргументов для методов поиска.И поместите предикаты, связанные с агрегатом в модуле агрегата (модуль как концепция DDD), т. Е. Пакет Java или пространство имен в вашем случае (не уверен, если в терминологии Microsoft это называется пространством имен, я пришел из мира Java).

В любом случае, если вы не используете предикаты, вы можете создать объект значения с поисковыми ключевыми словами (например, DTO), и он будет также жить в том же модуле, что и агрегат.

Надеюсь, это объяснение поможет.

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

Не думаю, что я бы беспокоился даже о наличии ключевых слов в домене.

Кажется, они являются своего рода классификатором (в довольно концептуальном смысле).Если бы у меня было в домене, у меня был бы простой список string.Но опять же, эти ключевые слова, вероятно, имеют очень небольшую ценность для бизнеса и, вероятно, не имеют никаких связанных с ними правил.Я предполагаю, что они помогают в поиске определенного продукта.

Возможно, вы все равно захотите «управлять» ключевыми словами по отдельности в вашем пользовательском интерфейсе.универсальный (возможно, поддомен) Tag / Keyword «хранилище», где любой Id (скажем, Guid) может иметь список ключевых слов или тегов.Таким образом, вы можете связать ключевые слова с чем угодно.

Чтобы довести это до крайности, универсальная система классификации может быть даже полезна ... но это уже другая тема:)

...