@oop_ru

Страница 13 из 785
Aleh
06.12.2016
21:20:34
бывают жесткие

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

da horsie
06.12.2016
21:20:46
ну а чего вдруг school ворнинг делает
не школа, а учитель делает предупреждение

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
вот это внутри учителя происходит $this->school->addWarning(new Warning\Ohuel(), $vasya)
не, кмк учитель редко ходит в деканат за выговарами ученику

они скорее у себя в листике пометку ставят

а потом на зачете давят

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

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
там скорее $this->listOfPizdabols[] = $student
это должен быть Collection

иначе у тебя будут дважды и трижды пиздаболы

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();

тогда я сделаю $company->fire($programmist)
исключение словишь "Only CTO can fire programmers"

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

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
это называется "самодокументируемый код"

и тут адаптер, в котором можно наследовать!)
а зачем тебе AbstractREpository? в нем нет публичных методов же

а "общие штуки" ты можешь как зависимости передать

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

и опять же никакого наследования

и кода столько же

Страница 13 из 785