Sergey
короч
Ale
кто-то после 2 предупреждений и просроченных лаб не ставит зачет
🐴
во-во
вот это внутри учителя происходит $this->school->addWarning(new Warning\Ohuel(), $vasya)
Sergey
в целом класс Student не нужен
Sergey
есть тупо Person и все
Sergey
если мы уж делаем систему учета студентов
Sergey
и хотим потом сделать интеграцию с системой военкомата)
Ale
вот это внутри учителя происходит $this->school->addWarning(new Warning\Ohuel(), $vasya)
не, кмк учитель редко ходит в деканат за выговарами ученику
Ale
они скорее у себя в листике пометку ставят
Ale
а потом на зачете давят
Sergey
а вот пример с отчислением мне понравился)
Ale
там скорее $this->listOfPizdabols[] = $student
Sergey
))))
🐴
там скорее $this->listOfPizdabols[] = $student
это должен быть Collection
🐴
иначе у тебя будут дважды и трижды пиздаболы
Ale
согласен
Ale
а, ты имеешь ввиду Set
Ale
хм
Ale
но если я только после 3 предупреждений иду в деканат?
Sergey
$loafers->add($vasia)
Ale
тогда мне надо $this->addWarningFor($vasya);
🐴
это твоя new Strategy\GoodTeacher() или BadTeacher()
🐴
KindTeacher(), AngryTeacher()
Sergey
нет
Ale
if ($this->numberOfWarningFor($vasya) > 3) { $this->school->ebanut($vasya); }
Sergey
это ты замутил композицию
Sergey
а тут надо
Sergey
а хотя тоже не надо
Sergey
это внутри учителя происходить должно
Sergey
$this->mood = new Angry();
Ale
это внутри учителя происходить должно
ну, у учителя есть интерфейс
Sergey
инкапсуляция ж
🐴
это и есть стратегия
Ale
а чисто полиморфизмом будет его поведение
Sergey
стратегия - это паттерн
🐴
поведение определяет
Sergey
не надо называть все стратегиями
🐴
это поведенческий паттерн
Sergey
в данном случае это "настроение"
Ale
вообще не стоит вставлять куда-то в имена названия паттернов
Sergey
да да
🐴
да, но настроение это и есть паттерн стратегия
Sergey
названия паттернов - для программиста. Названия сущности - для бизнеса
Ale
да, но настроение это и есть паттерн стратегия
ты это знаешь, другой программист может знает и этого достаточно
Sergey
да, но настроение это и есть паттерн стратегия
ты должен передать названиями классов/пропертей не используемые паттерны, а то что происходит. В данном случае учитель меняет свое настроение
Sergey
$this->mood = new Mood\Happy();
Sergey
тогда я сделаю $company->fire($programmist)
исключение словишь "Only CTO can fire programmers"
Ale
$this->character = new Charater\SvolochPoslednya
Ale
ну так и что?
Sergey
настроение это в чистом виде паттерн стратегия
но настроением это не перестало быть)
🐴
потому что оно определяет поведение
Sergey
окей
Ale
так и хорошо)
Sergey
натсроение - это подтип стратегии. То есть более конкретное название для типа сущности
🐴
да ради бога
Sergey
более конкретное название для состояния человека
Sergey
мы должны использовать максимально конкретные названия, передающие суть происходящего
Sergey
например называть вещи Catalog вместо ProductRepository
Ale
Catalog это интерфейс
Ale
скорее всего
🐴
да
Sergey
ProductREpository implements Catalog - так норм
🐴
блин
🐴
ну ок
🐴
не важно
Sergey
важно)
Sergey
это пожалуй самое важное
Ale
ProducteRepository extends AbstractRepository implements Catalog
Sergey
что бы код предавал не названия паттернов - а бизнес логику
Ale
и тут адаптер, в котором можно наследовать!)
Sergey
это называется "самодокументируемый код"
Sergey
и тут адаптер, в котором можно наследовать!)
а зачем тебе AbstractREpository? в нем нет публичных методов же
Sergey
а "общие штуки" ты можешь как зависимости передать
Ale
ну это доктриновский например