Вопрос

Объекты-значения не имеют идентификатора.ORM требуется идентификатор для обновления базы данных.

Как обмануть ORM?

(Пометка Id для объекта value как internal не будет работать, потому что ORM находится в другой сборке и перемещение его в ту же сборку неприемлемо).

Заранее благодарю.

Это было полезно?

Решение

Насколько я понимаю DDD, объекты значений - это всего лишь способ разделения ваших сущностей.Если объект value должен храниться с идентификатором в базе данных, это не объект value.

Пример:

Модель предметной области выглядит следующим образом (C #):

public class Customer : Entity
{
    public Guid CustomerID { get; }

    public string LastName { get; set; }

    public Address HomeAddress { get; set; }
}

public class Address : ValueObject
{
    public string Street { get; set; }

    public string City { get; set; }

    public string ZipCode { get; set; }
}

Соответствующая таблица базы данных будет выглядеть примерно так (Псевдо-SQL):

CREATE TABLE Customers
(
    CustomerID,

    LastName,

    HomeAddress_Street,

    HomeAddress_City,

    HomeAddress_ZipCode,
)

Чтобы сохранить адреса в отдельной таблице, вы бы сделали ее объектом, который имеет идентификатор.

Другие советы

Когда Эрик Эванс говорит о "сущности имеют идентичность, объекты значений - нет", он не имеет в виду столбец ID в базе данных - он говорит об идентичности как концепция.

У ВОс нет концептуальный идентичность.Это не значит, что они не должны были настойчивость идентичность.Не позволяйте реализации персистентности затуманивать ваше понимание сущностей в сравнении с VOs.

Смотрите мой пост здесь.

Лично у меня есть поле Id в объекте value - я рассматриваю его как еще один атрибут объекта value (например, имя, местоположение и т.д.).

Возможно, это не настоящий DDD, но у меня это работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top