У меня есть совокупность продуктов, в которой есть несколько ключевых слов для поиска продуктов. Я смоделировал это следующим образом:
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; }
}
В зависимости от entity-vs -value-object-the-ultimate-list-of-differences Объекты-значения имеют несколько характеристик:
1. Два объекта-значения считаются равными, если они имеют одинаковые значения атрибутов.
2. Объекты-значения имеют нулевой срок службы.
3. Объекты-значения неизменяемы.
Но для целей поиска я буду хранить ключевые слова как многие ко многим с таблицей продуктов, как рекомендовано здесь вместо строки, разделенной запятыми .
Итак, я стремлюсь смоделировать ключевое слово как объект значения, потому что меня не волнует его идентичность (будь то автоматически сгенерированное целое число или Guid) и пометка двух ключевых слов как равных по их атрибуту (который здесь заголовок).
Мой вопрос: Должен ли я моделировать ключевое слово как объект значения или сущность в зависимости от сценария выше и почему?
Изменить:
В зависимости от статьи, которую я предоставил выше:
Не вводите отдельные таблицы для объектов-значений, просто встройте их в таблицу родительской сущности.
Ключевое слово следует рассматривать как сущность (но я думаю, что модели домена и базы данных не должны зависеть друг от друга)