
Aleh
06.12.2016
21:20:34
бывают жесткие

Sergey
06.12.2016
21:20:42
забавно можно раскрутить пример)

da horsie
06.12.2016
21:20:46

Aleh
06.12.2016
21:21:06

Google

Aleh
06.12.2016
21:21:22
причем у каждого учителя эти предупреждения вообще по-своему работают

Sergey
06.12.2016
21:21:35
короч

Aleh
06.12.2016
21:21:37
кто-то после 2 предупреждений и просроченных лаб не ставит зачет

da horsie
06.12.2016
21:21:42
во-во
вот это внутри учителя происходит $this->school->addWarning(new Warning\Ohuel(), $vasya)

Sergey
06.12.2016
21:21:42
в целом класс Student не нужен
есть тупо Person и все
если мы уж делаем систему учета студентов
и хотим потом сделать интеграцию с системой военкомата)

Aleh
06.12.2016
21:22:21
они скорее у себя в листике пометку ставят
а потом на зачете давят

Sergey
06.12.2016
21:22:39
а вот пример с отчислением мне понравился)

da horsie
06.12.2016
21:22:42

Google

Aleh
06.12.2016
21:22:44
там скорее
$this->listOfPizdabols[] = $student

Sergey
06.12.2016
21:22:56
))))

da horsie
06.12.2016
21:22:58
иначе у тебя будут дважды и трижды пиздаболы

Aleh
06.12.2016
21:23:09
согласен
а, ты имеешь ввиду Set
хм
но если я только после 3 предупреждений иду в деканат?

Sergey
06.12.2016
21:23:43
$loafers->add($vasia)

Aleh
06.12.2016
21:23:50
тогда мне надо
$this->addWarningFor($vasya);

da horsie
06.12.2016
21:24:07
это твоя new Strategy\GoodTeacher() или BadTeacher()
KindTeacher(), AngryTeacher()

Sergey
06.12.2016
21:24:24
нет

Aleh
06.12.2016
21:24:29
if ($this->numberOfWarningFor($vasya) > 3) {
$this->school->ebanut($vasya);
}

Sergey
06.12.2016
21:24:29
это ты замутил композицию
а тут надо
а хотя тоже не надо
это внутри учителя происходить должно
$this->mood = new Angry();

Aleh
06.12.2016
21:25:03

Google

Sergey
06.12.2016
21:25:04
инкапсуляция ж

da horsie
06.12.2016
21:25:05
это и есть стратегия

Aleh
06.12.2016
21:25:10
а чисто полиморфизмом будет его поведение

Sergey
06.12.2016
21:25:16
стратегия - это паттерн

da horsie
06.12.2016
21:25:16
поведение определяет

Sergey
06.12.2016
21:25:20
не надо называть все стратегиями

da horsie
06.12.2016
21:25:27
это поведенческий паттерн

Sergey
06.12.2016
21:25:30
в данном случае это "настроение"

Aleh
06.12.2016
21:25:36
вообще не стоит вставлять куда-то в имена названия паттернов

Sergey
06.12.2016
21:25:43
да да

da horsie
06.12.2016
21:25:48
да, но настроение это и есть паттерн стратегия

Aleh
06.12.2016
21:25:50

Sergey
06.12.2016
21:25:53
названия паттернов - для программиста. Названия сущности - для бизнеса

Aleh
06.12.2016
21:26:03

Sergey
06.12.2016
21:26:22

da horsie
06.12.2016
21:26:25

Sergey
06.12.2016
21:26:32
$this->mood = new Mood\Happy();

Aleh
06.12.2016
21:27:10
$this->character = new Charater\SvolochPoslednya

da horsie
06.12.2016
21:27:11

Google

Aleh
06.12.2016
21:27:25
ну так и что?

Sergey
06.12.2016
21:27:27

da horsie
06.12.2016
21:27:29
потому что оно определяет поведение

Sergey
06.12.2016
21:27:33
окей

Aleh
06.12.2016
21:27:35
так и хорошо)

Sergey
06.12.2016
21:27:50
натсроение - это подтип стратегии. То есть более конкретное название для типа сущности

da horsie
06.12.2016
21:28:02
да ради бога

Sergey
06.12.2016
21:28:02
более конкретное название для состояния человека
мы должны использовать максимально конкретные названия, передающие суть происходящего
например называть вещи Catalog вместо ProductRepository

da horsie
06.12.2016
21:29:01

Sergey
06.12.2016
21:29:09

Aleh
06.12.2016
21:29:10
Catalog это интерфейс
скорее всего

da horsie
06.12.2016
21:29:13
да

Sergey
06.12.2016
21:29:18
ProductREpository implements Catalog - так норм

da horsie
06.12.2016
21:29:24
блин
ну ок
не важно

Sergey
06.12.2016
21:29:31
важно)

Google

Sergey
06.12.2016
21:29:40
это пожалуй самое важное

Aleh
06.12.2016
21:29:41
ProducteRepository extends AbstractRepository implements Catalog

Sergey
06.12.2016
21:29:50
что бы код предавал не названия паттернов - а бизнес логику

Aleh
06.12.2016
21:29:55
и тут адаптер, в котором можно наследовать!)

Sergey
06.12.2016
21:29:56
это называется "самодокументируемый код"
а "общие штуки" ты можешь как зависимости передать

Aleh
06.12.2016
21:30:26
ну это доктриновский например

Sergey
06.12.2016
21:30:33
ради бога
не наследуйся от доктриновского репоса
он не для этого сделан

Aleh
06.12.2016
21:30:57
он может быть вполне себе абстрактным
и тогда ну просто вынужден
хоть сальто делай, а передать его не могу, только наследника)
ну просто профита от того, что я явно привяжусь к классу в конструкторе или в иерархии особо нет
ибо к интерфейсу привязаться все равно не могу
и мокать все равно придется со всем говном, что оно там несет в себе

Sergey
06.12.2016
21:32:23
final class Catalog
{
private $repository;
public function __construct(EntityRepository $repository)
{
$this->repository = $repository;
}
public function add(Product $product)
{
}
}
и пусть в EntityRepository будут дефолтные методы аля find или add или remove
а конкретика в Catalog
и опять же никакого наследования
и кода столько же