Использование объекта значения в качестве идентификатора в сущности
-
27-10-2019 - |
Вопрос
Во время просмотра проекта Evans на образце DDD -проекта я замечаю, что в Cargo
Entity, Эванс использует TrackNumber, который является объектом значения. Почему он не выбирал простых string tracknumber
Вместо этого выбирает объект значения для идентичности? Вот фрагмент от Эванса:
public class Cargo implements Entity<Cargo> {
private TrackingId trackingId
}
public final class TrackingId implements ValueObject<TrackingId> {
private String id;
/**
* Constructor.
*
* @param id Id string.
*/
public TrackingId(final String id) {
Validate.notNull(id);
this.id = id;
}
Решение
Пара вещей, которые достигли бы:
- Инкапсулирует логику, что идентификатор отслеживания не должен быть нулевым
- Инкапсулирует логику, которую идентификатор отслеживания не должен меняться после установки.
С простой строкой грузовой объект должен знать об этих правилах. Использование подхода объекта Value означает, что TrackingID поддерживает эти правила о себе.
Не связан с StackOverflow