@yii2ru

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

Dmitriy
02.07.2017
21:55:40
а интерфейс, значит, мы запретили менять каким-то волевым решением?
Не запретим. но наш скласс реализующий этот интерфейс скажет нам об этом если интерфейс поменяется

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
Все поломается. и мы узнаем поздно. А интерфейс с бережет от этого

Dmitriy
02.07.2017
21:59:30
ну вот на конкретном примере, раньше метод возвращал boolean, а начал возвращать массив
интерфейс не допустит этого как минимум. если допустит мы до компилятора еще узнаем о этом

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
просто не понимаю этой панической боязни наследования
на дворе 2017 год, мы так и не научились использовать наследование

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
на дворе 2017 год, мы так и не научились использовать наследование
есть очень мало кейсов, где его нельзя выпилить из системы и очень много ситуаций в которых оно порождает сложность и боль

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

Страница 313 из 1721