Sergey
короч
Ale
кто-то после 2 предупреждений и просроченных лаб не ставит зачет
🐴
во-во
вот это внутри учителя происходит $this->school->addWarning(new Warning\Ohuel(), $vasya)
Sergey
в целом класс Student не нужен
Sergey
есть тупо Person и все
Sergey
если мы уж делаем систему учета студентов
Sergey
и хотим потом сделать интеграцию с системой военкомата)
Ale
Ale
они скорее у себя в листике пометку ставят
Ale
а потом на зачете давят
Sergey
а вот пример с отчислением мне понравился)
🐴
Ale
там скорее
$this->listOfPizdabols[] = $student
Sergey
))))
🐴
🐴
иначе у тебя будут дважды и трижды пиздаболы
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
да да
🐴
да, но настроение это и есть паттерн стратегия
Ale
Sergey
названия паттернов - для программиста. Названия сущности - для бизнеса
🐴
Sergey
$this->mood = new Mood\Happy();
Ale
$this->character = new Charater\SvolochPoslednya
🐴
Ale
ну так и что?
Sergey
🐴
потому что оно определяет поведение
Sergey
окей
Ale
так и хорошо)
Sergey
натсроение - это подтип стратегии. То есть более конкретное название для типа сущности
🐴
да ради бога
Sergey
более конкретное название для состояния человека
Sergey
мы должны использовать максимально конкретные названия, передающие суть происходящего
Sergey
например называть вещи Catalog вместо ProductRepository
🐴
Sergey
Ale
Catalog это интерфейс
Ale
скорее всего
🐴
да
Sergey
ProductREpository implements Catalog - так норм
🐴
блин
🐴
ну ок
🐴
не важно
Sergey
важно)
Sergey
это пожалуй самое важное
Ale
ProducteRepository extends AbstractRepository implements Catalog
Sergey
что бы код предавал не названия паттернов - а бизнес логику
Ale
и тут адаптер, в котором можно наследовать!)
Sergey
это называется "самодокументируемый код"
Sergey
а "общие штуки" ты можешь как зависимости передать
Ale
ну это доктриновский например