У меня небольшая проблема с пониманием объектов ddd-значений, поэтому из моего домена возникла пара вопросов, которые мне действительно нужны, чтобы решить их,
Первый вопрос :
Допустим, у меня есть car
сущность и wheel
значение объекта wheel
имеет две сущности, которые rubber
а также rims
Итак, проблема в том, разрешено ли колесу иметь внутри него сущности?
пример :
namespace Domain\ValueObjects;
class Wheel{
private $rim;
private $rubber;
public function __construct(Domain\Models\Rim $rim, Domain\Models\Rubber $rubber){
$this->rim = $rim->toArray();
$this->rubber = $rubber->toArray();
}
}
Второй вопрос:
когда я сопоставляю car
от моей инфраструктуры до реальной модели предметной области, как я собираюсь отобразить обод, если я хочу сказать, вернуть обод колеса, другими словами, как я собираюсь построить объект типа обод из колеса? это статическая функция, как public static function fromNative()
;
Замечания :
чтобы быть более конкретным во втором вопросе, как вы можете заметить, когда я создаю объекты-значения, я устанавливаю объект как нативный тип, который array
поэтому я снимаю ответственность за отображение с ODM
Это хорошая практика или я должен оставить эту ответственность ODM
,
В ответ на ваш первый вопрос, объекты значения представляют объект, который не имеет идентичности и сопоставим только по значению. Сущности имеют идентичность, поэтому, даже если их значения одинаковы, они все равно являются принципиально разными объектами. Таким образом, в вашем сценарии, когда вы включаете сущности в объект значения, у вас больше нет объекта значения, поскольку вы не можете сравнить его на основе одного значения.
Однако если обод и резина являются ценными объектами, тогда хорошо иметь составной объект ценностей колес.
Что касается второго вопроса, если вы спрашиваете, как создать сущность, имеющую объект значения из вашего уровня данных, то я предлагаю вам сделать это, если возможно, из ODM. Иногда может потребоваться настраиваемое отображение в зависимости от того, насколько оно сложное. Я бы определенно избегал любых методов, которые обслуживают проблемы инфраструктуры, которые будут добавлены к объектам домена.
Других решений пока нет …