
Sergey
06.12.2016
20:59:55
тут как раз подходы в духе "наследуй воруй убивай" работают только в путь
тот же Yii как пример)
а если требования меняются часто? Или ты понятия не имеешь на данный момент что на что влияет, то нужно вводить избыточность, дробление (декомпозиция если по другому)
что бы минимизировать риски

Google

Aleh
06.12.2016
21:00:59

Sergey
06.12.2016
21:01:08
короч
декомпозиция
разделение обязанностей
управление связанностью
все ради этого
иногда можно и понаследовать, никто ж не говорит что это всегоа плохо, это не нужно просто
маленькую
У тебя есть классы Human, Student, Teacher.
опиши как сделать так, что бы можно было сделать студента Васю и учителя Марью Ивановну

da horsie
06.12.2016
21:05:12
new Human('Вася', new Strategy\Student());

Sergey
06.12.2016
21:05:38
да блин

Google

Sergey
06.12.2016
21:05:42
ты все сломал

Aleh
06.12.2016
21:06:02
он знал))

Sergey
06.12.2016
21:06:17
я ж хотел что бы он наследование замутил(

da horsie
06.12.2016
21:06:22
я предположил

Sergey
06.12.2016
21:06:30
что бы я потом "а теперь сделай что бы Марья отчислила Васю и тот стал солдатом"
или "а теперь перенесемся в 41-ый век и преподавать будет робот"

da horsie
06.12.2016
21:07:15
$vasya->setStrategy(new Strategy\Soldier());

Aleh
06.12.2016
21:07:23
фу, setter

da horsie
06.12.2016
21:07:42
нуканука
а как надо?

Sergey
06.12.2016
21:09:09
хз)
changeRole
хотя бы
а то стратегии какие-то
"студент" это не стратегия, это по сути состояние души)

da horsie
06.12.2016
21:10:08
ну setRole()
setBehavior()

Sergey
06.12.2016
21:10:16
почему setRole?
почему не changeRole?

da horsie
06.12.2016
21:10:31
что значит change?

Google

da horsie
06.12.2016
21:10:44
в чем отличие от set?

Aleh
06.12.2016
21:10:55
$vasya->expell();

Sergey
06.12.2016
21:10:57
`As a teacher, I want to deduct student from course in order to punish him"
$colonel->summon($vasia)

Aleh
06.12.2016
21:11:21
$teacher->expell($vasya);
хотя скорее так

da horsie
06.12.2016
21:11:47

Sergey
06.12.2016
21:11:47
а да, expell

da horsie
06.12.2016
21:11:53
там и будет setRole

Aleh
06.12.2016
21:12:03
deduct вроде про налоги, я тож сначала подумал так написать)
не
там просто $vasya->role = null;
они ж одного класса
ну или приватный метод какой-нибудь

da horsie
06.12.2016
21:13:00

Aleh
06.12.2016
21:13:04
private
само собой

Sergey
06.12.2016
21:13:23
паблик фуу
объекты одного типа имеют доступ к приватному состоянию друг друга

da horsie
06.12.2016
21:13:34
а кто у нас одного типа?

Aleh
06.12.2016
21:13:36
никаких public(только редко в дто) и никогда protected(никогда как наследование)

Google

da horsie
06.12.2016
21:13:52

Sergey
06.12.2016
21:14:00
но вообще метод expell должен быть у Teacher

da horsie
06.12.2016
21:14:31
метод expell должен быть у SchoolClass

Aleh
06.12.2016
21:14:36

Sergey
06.12.2016
21:14:39
хз, у меня сейчас у класса User есть методы becameMerchant(MerchantAccountMaker $maker) и т.д.

Aleh
06.12.2016
21:14:42

da horsie
06.12.2016
21:14:44
или у StudentGroup

Sergey
06.12.2016
21:15:28
не дает да
в целом хороший вопрос... дай подумать

Aleh
06.12.2016
21:16:01
ну да, потому что у интерфейса его нет. becameExpelled()
тогда будет)
ну или leaveUniversity хз

Sergey
06.12.2016
21:17:06
хм...
погоди
а разве студент что-то знает об университете?

Aleh
06.12.2016
21:17:33
а знает?

Sergey
06.12.2016
21:17:39
нет

Aleh
06.12.2016
21:17:44
тогда не будет)

Sergey
06.12.2016
21:17:46
и отчисляет не преподаватель, а деканат

Google

da horsie
06.12.2016
21:17:53
класс знает о студенте
деканат тоже знает

Aleh
06.12.2016
21:18:07
вообще как @f3ath предложил, school некий
отчисляет

da horsie
06.12.2016
21:18:33
метод $school->expell($vasya) вызывется изнутри деканата
так же как до этого вызвался $school->enroll($vasya)

Aleh
06.12.2016
21:19:06
вообще, решение об отчислении принимает school, но как к этому привязан учитель?
он должен что-то сказать school о student

Sergey
06.12.2016
21:19:20
учитель подает запрос на отчисление

Aleh
06.12.2016
21:19:20
что именно?
failedExam?

Sergey
06.12.2016
21:19:30
ну или да
скорее так
3 зафэйленных экзамена - отчислен

Aleh
06.12.2016
21:19:43
$teacher->markAsFailed($exam, $vasya);

Артур Евгеньевич
06.12.2016
21:19:56
Ебать у вас тут дискуссия
Вы что профессора?

da horsie
06.12.2016
21:20:06

Sergey
06.12.2016
21:20:16
почему варнинг?

Aleh
06.12.2016
21:20:20
ну а чего вдруг school ворнинг делает
они бывают мямли