есть сущность, у сущности есть тип, в зависимости от типа разное поведение на одних и тех же методах. Напрашивается разделение на классы.
Single Table не подходит, из-за кейса изменения типа (изменение только через запрос сработает) + при создании надо создавать конкретные дочерние сущности, т.е. тоже не очень выглядит.
Либо внутри сущности вводить стратегии под каждый тип, но тогда полная анемия.
Может еще какие варианты есть?
каждой сущности своя таблица ? у вас же они разные даже по поведению, значит по сути это разные вещи
Одна таблица. Так как есть констрейнт на идентификатор, ну и в целом это скорее одна сущность по бизнесу.
mapped superclass может тогда ?
Не подходит, мне нужно не зная типа, получить по идентификатору некую сущность и чтобы она прилетела нужного класса. Как то так)
фабрику тогда организуйте
"не зная типа" vs "нужного класса" это как? да и что за кейс такой? юзеру плевать какого типа там сущность, у него есть цифра и он с цифрой что-то делает?
Какую и как? Мне надо сущности получить, которые будут в UOF.
выглядит странно
ну чисто как вариант, хотя не уверен что взлетит Entity достается доктриной как обычно Entity::convertToType(match $this->type): self ChildEntity extends Entity
Есть базоваяСобака, есть БольшаяСобака, МаленькаяСобака. Ну и пусть будет метод "рычать" и они делают это по разному. При этом сам код не должен знать какая именно сейчас собака прилетела из репозитория. Кейс работает на Single Table но другие кейсы (изменение типа) - не очень.
а юзер с кем взаимодействует? он не знает?
Он с Базовой собакой, у которой есть интерфейс "рычать" )
а почему тогда собака разбита на три типа? пусть получает Собаку по ид и пусть та рычит. а как она должна рычать - пусть она решает на основании своего мироощущения стейта
Тогда тут вариант куча методов с switch case. Что напрашивается на рефакторинг. Рефакторить можно в 2 направление - на три собаки, или делать 1 анемичную собаку а внутри нее 3 стратегии
Обсуждают сегодня