class SomeVO {
private $name;
public function edit($name): void
{
$this->name = $name;
}
}
Может, но зачем? Мб путаете с dto?
Разве VO от DTO отличается не тем, что DTO является структурой, которая не предполагает любых методов? Содержит только данные для передачи
Да, а ВО идентифицируется значением. Если меняется значение, то это другое ВО
Разве? Я писал DTO с сеттерами и геттерами
По условию задачи у меня есть сущность заказа интернет-магазина. Эта сущность обладает несколькими свойствами, которые соответствуют данным о доставке товара (город, адрес...). Поэтому я вынес свойства о доставке в отдельный объект "Delivery" и подумал, что это будет как-бы "embedded value object" (ни к какому фреймворку задача не привязана). Часть свойств заказа (в том числе данные о доставке) должны быть редактируемыми. Поэтому я создал public метод "edit" как для объекта заказа, так и для объекта Delivery. Конечно, ни какого id у объекта Delivery нет, то есть связано может быть только по значению. А значит - это не сущность (надеюсь, что я верно рассуждаю). Если Delivery это не VO, то что? Я, наверное, в дизайне допустил ошибку. При этом предполагается только одна таблица - таблица заказа. И отступить от этого я не могу upd: Кажется я понял, что менять vo нельзя, но можно создать новый и привязать с новыми значениями
Volodymyr c Doctrine я не работал, но в доках нашел, что embeddable есть value object. И, видимо, embeddable не иммутабелен https://www.doctrine-project.org/projects/doctrine-orm/en/2.9/tutorials/embeddables.html
Ок. VO должен быть иммутабелен. А можно метод edit заменить на SomeVO::fromSelf? Чтобы получить новый объект, но со значениями свойств старого?
Обсуждают сегодня