
Konstantin
02.07.2017
21:55:08
а интерфейс, значит, мы запретили менять каким-то волевым решением?

Dmitriy
02.07.2017
21:55:40

Павел
02.07.2017
21:56:02

Konstantin
02.07.2017
21:56:02
ну просто если какой-то болван решил покалечить какой-то класс в проекте, то сломаются все места, где этот класс используется

Google

Konstantin
02.07.2017
21:57:04
то есть если покалечить некий класс не запрещено, то почему пользоваться этим классом нормально, а наследоваться от него ненормально?
чем наследование от класса хуже использования?

Dmitriy
02.07.2017
21:58:13

Konstantin
02.07.2017
21:58:29
а если от этого метода зависит что-то еще в проекте?
ну вот на конкретном примере, раньше метод возвращал boolean, а начал возвращать массив

Dmitriy
02.07.2017
21:58:56
Все поломается. и мы узнаем поздно. А интерфейс с бережет от этого

andrew
02.07.2017
21:59:22

Dmitriy
02.07.2017
21:59:30

Konstantin
02.07.2017
21:59:43
ну какие компиляторы в интерпретируемом языке? :)
все равно как-то странно получается
объявляем интерфейс, в котором заявляем, что метод возвращает boolean

Dmitriy
02.07.2017
22:00:25

Konstantin
02.07.2017
22:00:29
создаем класс, который реализует интерфейс

Google

Konstantin
02.07.2017
22:00:31
окей

Dmitriy
02.07.2017
22:00:33

Konstantin
02.07.2017
22:00:47
если балбес в классе поменял возвращаемый тип, получил ошибку
что мешает балбесу изменить интерфейс?

Dmitriy
02.07.2017
22:01:16
ничего. но мы это поймем в своем классе

andrew
02.07.2017
22:01:27
Что мешает балбесу случайно удалить весь проект

Dmitriy
02.07.2017
22:01:28
у нас тоже реализует интерфейс класс

Konstantin
02.07.2017
22:01:38
а у нас класс сломается...
ну вообще да
только для этого интерфейс необязателен

andrew
02.07.2017
22:01:57
Что мешает балбесу уронить стойку с сервером

Dmitriy
02.07.2017
22:02:06

Konstantin
02.07.2017
22:02:21
а если мы хинт приделаем к этому классу?
что метод возвращает конкретный тип
неужели у нас интерпретатор не ругнется, что мы его теперь переопределяем?

Dmitriy
02.07.2017
22:02:46
а толку ? я в родительском могу его изменить

andrew
02.07.2017
22:03:03
Интерфейс еще нужен для принципа подстановки solid. И чтобы можно было адаптеры прикручивать

Dmitriy
02.07.2017
22:03:22
не для солид. а для контейнера

Konstantin
02.07.2017
22:03:42
я ж не против интерфейсов
просто не понимаю этой панической боязни наследования

Google

Konstantin
02.07.2017
22:04:08
вроде смысл претензии прояснился
но...
> Что мешает балбесу уронить стойку с сервером
вот как по мне, то если балбесы могут покалечить родительский класс, то закладываться на это - это как закладываться на то, что они уронят стойку

Dmitriy
02.07.2017
22:04:49
Я не говорил что это панические болезни. Я наследуюсь когда это нужно.
Просто иногда это не нужно. А тут всегда советуют "наследование" даже когда этого вообще не нужно
ну да yii2 не всегда дает хорошие интсрументы для правильной архитектуры. и с этим ничего нельзя сделать

Konstantin
02.07.2017
22:05:59
кстати только что проверил

f4rt~
02.07.2017
22:06:27

Konstantin
02.07.2017
22:06:32
The enforcement of the declared return type during inheritance is invariant; this means that when a sub-type overrides a parent method then the return type of the child must exactly match the parent and may not be omitted. If the parent does not declare a return type then the child is allowed to declare one.
если в родительском классе указан возвращаемый тип, то в наследниках придется указывать такой же
в php7

f4rt~
02.07.2017
22:07:17

Dmitriy
02.07.2017
22:07:31

andrew
02.07.2017
22:10:02

Dmitriy
02.07.2017
22:10:21

andrew
02.07.2017
22:10:38
И всн

Dmitriy
02.07.2017
22:10:48
И всн
как раз контейнер и это реализует

andrew
02.07.2017
22:11:40
Даже кто-то умный говорил, мол предпочитайте композицию наследованию

Google

Dmitriy
02.07.2017
22:12:17
да.

f4rt~
02.07.2017
22:12:18
когда domain expert приходит и говорит теперь нам нужно так, а не эдак
а хотелки бизнеса имеют свойство плодиться, а когда архитектура завянана на наследование это сильная связность, гуглить в сторону coupling && cohesion
и почему это плохо
идеальная грань посередине, что собственно нам и дает композиция

andrew
02.07.2017
22:14:19
Но насколько я понимаю, правильный декоратор тот, который реализует интерфейс декорируемого объекта
В юи с этим сложно

Admin
ERROR: S client not available

andrew
02.07.2017
22:14:42
Особенно для эктив рекорд моделей
В ddd еще норм

f4rt~
02.07.2017
22:15:11
вот реквестирую @yegor256 с докладом о том, почему AR анти паттерн
но это считай необходимое зло
потому что мы так привыкли делать

andrew
02.07.2017
22:15:40
Увы, юи его использует
Поэтому декоратор приходится делать без реализации интерфейса
Ибо это боль, все методы реализовывать и делегировать внутреннему объекту

Dmitriy
02.07.2017
22:16:42

andrew
02.07.2017
22:16:58
Можно магическими методами как поведения прокидывать

f4rt~
02.07.2017
22:17:09
не один yii, сути вещей не меняет, можно на вещи смотреть по разному и задача разработчика выбрать путь которые в перспективе будет менее болезненный в поддержке напиливанию новых фич и тд, потому и приходится идти на своего рода компромисы, потому и inheritance is evil

Google

andrew
02.07.2017
22:17:34
Можно спокойно.
Чтоб сделать декоратор ар модели ты все функции реализуешь из интерфейса?)

Dmitriy
02.07.2017
22:18:20
аа AR. у меня еще перед AR абстракция

andrew
02.07.2017
22:19:25
Поэтому в контексте ар моделей это боль юзать правильную декорацию

Dmitriy
02.07.2017
22:22:05
хм. для чего тут нужна декорация в AR ?
не могу придумать кейс

andrew
02.07.2017
22:23:38
Чтобы добавить доп функциональность динамически
Для чего и служат декораторы
Сталкивался с этим давно, но забил

Dmitriy
02.07.2017
22:24:12
я знаю для чего обычно они служат.
Ну у меня это делают отдельные классы.
и не декораторы

andrew
02.07.2017
22:24:36
Ну рад за вас
)))
Тут ведь вопрос архитектуры

Павел
02.07.2017
22:31:49
Выдохся холивар

Dmitriy
02.07.2017
22:38:31
его не было

Сергей
02.07.2017
22:40:45
Читаю про DDD на сон грядущий :) Может есть у кого ещё примеры DDD на базе AR и Yii2, кроме Дмитрия Елисеева (https://github.com/ElisDN/yii2-demo-aggregates/tree/ar) ?

Aziz
02.07.2017
23:50:21
[['password'], 'string', 'min'=>6, 'message'=>'Минимальная длинна пароля 6 символов'],
Вывод message не работает. Как записать правильно?

Konstantin
03.07.2017
00:04:17
Не работает потому что на длину может быть не message а например messageLenght

Сергей
03.07.2017
00:05:08
tooShort вместо message
http://stuff.cebe.cc/yii2docs-ru/yii-validators-stringvalidator.html#$tooShort-detail

M
03.07.2017
06:37:00
configuring node js support