Разница между дочерней сущностью и объектом значения в DDD - PullRequest
0 голосов
/ 06 июля 2019

Я нашел эту замечательную статью , где в разделе структура агрегатов я вижу различие между дочерней сущностью (здесь: позиция заказа) и значение объекта (здесь: адрес).

enter image description here

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

Чего мне не хватает на картинке?

1 Ответ

2 голосов
/ 06 июля 2019

Объекты-значения являются гораздо «значениями с методами», чем «объектами».

«Адрес» как значение, принципиально не отличается от целочисленного типа примитива. Существенное различие между ними состоит в том, что большинство общих языков программирования не имеют встроенного типа адреса. Поэтому мы должны свернуть наш собственный или повторно использовать один из библиотеки.

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

Объекты-значения - это данные с присоединенной семантикой запроса.

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

void Entity::onChange(data) {
    // dereference to get the current state value
    val oldState = this.state;

    // use a pure function to compute a new state value
    val newState = stateChange(oldState, data);

    // update the reference
    this.state = newState;
}

Конкретная структура данных, используемая для хранения состояния, является подробностью реализации сущности, не представляющей интереса для других элементов в решении.

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

Это "точно так же, как корень", но в меньшем масштабе - у корня есть более полное понимание всего контекста.

Смотри также

...