Size: a a a

2020 June 19

DZ

Daniil Zobov in PHP
Maksim Masiukevich
Вот я понятия не имею зачем юзать трейты+интерфейс
ну погоди
1) у тебя есть интерфейс, ты по нему можешь определять, пришел ли тебе объект, имеющий данные методы
2) например, тебе не хочется делать огромное дерево наследования, а хочется добавить, к примеру, некую логику, которая может быть легко отключена, не являющаяся критичным путём работы класса. Например, search, который везде будет одинаков, но требуется лишь для нескольких объектов
источник

MM

Maksim Masiukevich in PHP
Daniil Zobov
ну погоди
1) у тебя есть интерфейс, ты по нему можешь определять, пришел ли тебе объект, имеющий данные методы
2) например, тебе не хочется делать огромное дерево наследования, а хочется добавить, к примеру, некую логику, которая может быть легко отключена, не являющаяся критичным путём работы класса. Например, search, который везде будет одинаков, но требуется лишь для нескольких объектов
Ниче не понял, но звучит, как хуевый дизайн
источник

KN

Kirill Nesmeyanov in PHP
другого и не существует...
источник

DZ

Daniil Zobov in PHP
ок, я на пальцах покажу из боевого примера:
1) есть класс BaseModel, ORM
2) от него наследуются объекты User, Group, IP, Network
3) тебе нужно реализовать пару методов, которыми обладают только классы IP и Network (например, getAddress), ты пишешь трейт и двум объектам ставишь интерфейс Connectable
4) далее, при передаче двух объектов в метод SomeClass::link(Connectable $source, Connectable $target)
5) при этом, у тебя User и Group не будут обладать этой логикой

Эту задачу можно сделать иначе - сделать класс ConnectableModel, от которой наследовать IP и Network
источник

DZ

Daniil Zobov in PHP
дальше уже кому как удобнее
источник

DZ

Daniil Zobov in PHP
но в случае, если у тебя базовая модель (ConnectableModel) начнет обрастать логикой, а тебе надо навесить только эти методы на уже живущий объект, возможно потребуется много лишней работы
источник

MM

Maksim Masiukevich in PHP
Фу
источник

SP

Sergey Protko in PHP
Kirill Nesmeyanov
одно копипаста с полным контролем что и куда, а другое контракт
когда тебе нужен контроль за копипастой - я это называю "вынести проблему под ковер что бы глаза не мазолила, а решать проблему не надо"
источник

MM

Maksim Masiukevich in PHP
Треш и содомия
источник

DZ

Daniil Zobov in PHP
делайте RFC в PHP предлагая удалить нахрен трейты)
источник

DZ

Daniil Zobov in PHP
если вам они так претят
источник

SP

Sergey Protko in PHP
Daniil Zobov
ок, я на пальцах покажу из боевого примера:
1) есть класс BaseModel, ORM
2) от него наследуются объекты User, Group, IP, Network
3) тебе нужно реализовать пару методов, которыми обладают только классы IP и Network (например, getAddress), ты пишешь трейт и двум объектам ставишь интерфейс Connectable
4) далее, при передаче двух объектов в метод SomeClass::link(Connectable $source, Connectable $target)
5) при этом, у тебя User и Group не будут обладать этой логикой

Эту задачу можно сделать иначе - сделать класс ConnectableModel, от которой наследовать IP и Network
я помню как-то компания подрядчик с которыми мы работали сказали "мы будем реюзать весь код" и пошли вот эти BaseModel, BaseEntity, BaseService...
источник

SP

Sergey Protko in PHP
какой же это был пиздец
источник

KN

Kirill Nesmeyanov in PHP
потому что надо было называть "DomainModel"
источник

SP

Sergey Protko in PHP
через пару месяцев любая правка в этом пиздеце вызывала боль
источник

SP

Sergey Protko in PHP
Kirill Nesmeyanov
потому что надо было называть "DomainModel"
а еще мастер в мэйн переименовать что бы победить расизм да
источник

KN

Kirill Nesmeyanov in PHP
Kirill Nesmeyanov
потому что надо было называть "DomainModel"
сразу +3 к солидности и -2 к интеллекту
источник

DZ

Daniil Zobov in PHP
Если вы работаете с фреймворком, вы в любом случае будете наследоваться от их классов, как иначе-то?)

Например, в случае с ORM вы хотите, чтобы все ваши объекты ходили в определенную схему в БД - вы будете хреначить в каждой название схемы или все-таки вынесете этот маленький кусочек в BaseModel?

BaseModel должен состоять из нескольких строчек, раздуваться не должен
источник

KN

Kirill Nesmeyanov in PHP
> Если вы работаете с фреймворком, вы в любом случае будете наследоваться от их классов, как иначе-то?)

легко!
источник

SP

Sergey Protko in PHP
Daniil Zobov
Если вы работаете с фреймворком, вы в любом случае будете наследоваться от их классов, как иначе-то?)

Например, в случае с ORM вы хотите, чтобы все ваши объекты ходили в определенную схему в БД - вы будете хреначить в каждой название схемы или все-таки вынесете этот маленький кусочек в BaseModel?

BaseModel должен состоять из нескольких строчек, раздуваться не должен
может хватит Yii юзать?
источник