Size: a a a

2021 April 17

C

CvekCoder in symfony
Чем? Поглядел в трейт и все увидел. В чем неочевидность?
источник

АВ

Александр Вологжанин... in symfony
Представь что есть интерфейс с двумя методами:
public support(MyClass $obj, MyClassTwo $obj2);
public handle(MyClass $obj, MyClassTwo $obj2);

Реализация support почти везде будет на подобии:
public support(MyClass $obj, MyClassTwo $obj2)
{
   return $obj->name === $obj2->name;
}

Но иногда в 1 из 10 случаев будут встречаться более сложные проверки, я вижу 3 пути:
1. Создаешь абстрактный класс за место интерфейса
2. Копипастишь
3. Создаешь трейт
источник

C

CvekCoder in symfony
В данном конкретном случае я и хочу его повысить. Потому что каплинг, как и пиво, не только вредно, но и полезно. Надо мне изменить во всех дефолт реализациях поле на nullable - я это изменю в одном месте.
источник

АЯ

Андрей Ява in symfony
1. В том, что в них начинают писать сторонний функционал. Прям функционал  не два поля
2. Поля неочевидны. Он сам неочевиден, и его малейшее изменение сразу автоматом применится ко всем сущностям.
Другими словами - трейт нельзя менять никогда.
источник

Ш

Шурик in symfony
а часто бывает кейс, что тебе надо прям во всех дефолт сразу что-то поменять?)
источник

C

CvekCoder in symfony
Бывало кстати
источник

Ш

Шурик in symfony
типа есть 100 классов и для всех 100 надо поменять сраный createdAt?
а что должно произойти, чтоб такое понадобилось?
источник

C

CvekCoder in symfony
Это ж тот самый dry
источник

Ш

Шурик in symfony
ладн, я пас)
источник

Ш

Шурик in symfony
не)
источник

АЯ

Андрей Ява in symfony
Это не dry
источник

C

CvekCoder in symfony
С другими трейтами было, с createdAt - не припомню
источник

АЯ

Андрей Ява in symfony
Dry это когда у тебя функционал лежит в одном месте, а если ты его скопипастил везде куда только можно, просто приныкал копипасту треем - это не драй, это замаскированная копипаста
источник

C

CvekCoder in symfony
Пример - раньше был date, а теперь хотим datetime.
Был datetime - хотим datetime_immutable
источник

SM

Sergey Milegov in symfony
источник

C

CvekCoder in symfony
Отказываюсь от того замечания, плохо написал). Не то имел в виду, но как ни крути - явно налажал)
источник

АЯ

Андрей Ява in symfony
Хотим чтоб все классы начинались буквой C, а интерфейсы с буквы I
источник

АЯ

Андрей Ява in symfony
А переменные хранящие объекты с приставки O
источник

C

CvekCoder in symfony
Трейт - это маскировка копипаста?
источник

АЯ

Андрей Ява in symfony
Да.
источник