Всем привет. Такой вопрос.
У меня есть сущность, пусть он будет называться Vehicle.
Одно из полей этого класса - string type. Сейчас все возможные значения этого поля сложены в этом же классе в константы и в куче мест решение принимаются на основании сравнения $vehicle->getType() с какой-то из констант.
Я хочу вынести это поле в Embeddable класс, пусть это будет VehicleType, и вместо всех этих сравнений статики вызывать у VehicleType соответствующие методы либо же внутри Vehicle вызывать $this->type->isAllowed()
И соственно вопрос - как правильно расположить внутри этого классу логику? Ведь по идее, если у меня 10-20 возможных значений констант, то класс VehicleType должен знать о всех них возможных вариантах своего состояни и в зависимости от него принимать решения. То есть внутри него должна быть какая-то мапа с соответствиями тип <-> разрешенные штуки? Выглядит как-то громоздко. Думал, может, вынести всё это в какую-то фабрику, а она будет инстанциировать эти объекты, но в случае, если у меня Embeddable свойство, то доктрина его создаст в обход фабрики и это не сработает. Еще думал у самой сущности в геттере для свойства getType возвращать не просто стринговое поле а VehicleTypeFactory::fromString($this->type), но мне почемуто такое тоже выглядит нехорошо.
Как правильно поступать? Или ткните носом где почитать как правильно заменить кучу констант на Embeddabble/Value Object. Спасибо