Как различить Entity и ValueObject? - PullRequest
0 голосов
/ 21 мая 2018

Как различить Entity и ValueObject ?

Для моего недавнего проекта с использованием DDD меня часто смущают эти два.

  1. Что такое Entity и VO?
  2. Ответственность
  3. Должны ли Entity и VO содержать какую-либо логику, такую ​​как анализ даты, возвращая логическое значение по полям?

1 Ответ

0 голосов
/ 21 мая 2018

Я также хотел бы, чтобы это был простой способ определения, является ли ваша новая модель Entity или ValueObject?

Лично я использую следующий вопрос:

  • Есть ли в моей модели какое-либо свойство, которое имеет значение в истории ее изменений?

    • , если да, то моя модель, скорее всего, будет Entity
    • , если нет, томоя модель, скорее всего, ValueObject

Так что, используя ее в качестве примера, модель Person зависит от нашей области (логика / бизнес), история ее FirstNameсобственность может иметь значение или нет.если это так, то Person равно Entity.

С другой стороны, мы должны иметь возможность установить updatable = false для наших ValueObject свойств.и когда необходимо обновление, просто мы можем удалить предыдущую запись и вставить новую [1].

Что касается других ваших вопросов, я думаю, что одна из величайших вещей в DDD - это изоляция логики в уровне предметной области / модели.,«Простые POJO, которые легко тестируются».Поэтому не стесняйтесь добавлять любую логику в свой домен / модель настолько, насколько вы можете unit-test их с легкостью.

Я надеюсь, что мой ответ был своего рода полезным, и, пожалуйста, дайте мне знатьесли вы найдете что-то более удобное для различения этих двух парней!: ^)

[1] Если ValueObject находится во многих отношениях, то нам нужно проверить, нужно ли обновление для всех (односторонних) ссылок или нет.если нет, то мы оставляем текущую запись как есть и вставляем новую запись (для тех ссылок, для которых требуется обновление).

...