@symfony_php

Страница 648 из 1418
Andrey
15.02.2018
14:56:18
Тут больше нарушения dip

Sergey
15.02.2018
14:56:26
Andrey
15.02.2018
14:56:46
A. High-level modules should not depend on low-level modules. Both should depend on abstractions. B. Abstractions should not depend on details. Details should depend on abstractions.

Google
Tex
15.02.2018
14:56:49
в каком месте?))
прибитая гвоздями реализация, потому что лень было на интерфейсах показывать, вестимо

Andrey
15.02.2018
14:56:53
Both should depend on abstractions.

Ок

Sergey
15.02.2018
14:57:14
Both should depend on abstractions.
мне кажется ты не очень понимаешь суть этого

Alexandr
15.02.2018
14:57:32
а если модули одного уровня, что мешает им зависеть напрямую?)

Sergey
15.02.2018
14:57:43
ну то есть тут вроде человек жаловался что пришел какой-то чел, сказал что у всего должен быть интерфейс а иначе не по солид и нарушает ДИП

Andrey
15.02.2018
14:58:52
Ну судя по коду у нас не одного уровня

Tex
15.02.2018
14:58:53
а если модули одного уровня, что мешает им зависеть напрямую?)
да это вообще спорная фигня. мне нравится идея о том, что класс сам себе интерфейс, если не предполагается множественных реализаций. интерфейс обязателен даже для одного класса только если компонент находится где-то сбоку, чтобы ты смог подменить его части не переписывая и не переопределяя нахрен всё. а на одном уровне это не про то.

Sergey
15.02.2018
14:58:59
но вот тебе еще интересный вариант class SomeProvider implements Provider { public function supports(Data $data): bool { return $data instanceOf SomeData; } public function handle(Data $data) { if (!$data instanceof SomeData) { throw new \InvalidArgumentException(); } // .. do stuff } }

нарушает ли этот код LSP?

Andrey
15.02.2018
14:59:44
нарушает ocp

Sergey
15.02.2018
14:59:55
нарушает ocp
в каком месте?)

Google
Tex
15.02.2018
15:00:03
нарушает ли этот код LSP?
неистово, а что?

Sergey
15.02.2018
15:00:14
неистово, а что?
ну вот он не нарушает LSP

Andrey
15.02.2018
15:00:35
Объкты должны быть открыты для расширения закрыты от изменения

Andrey
15.02.2018
15:00:54
Если у тебя появится SomeData2

потом 3

Будет вермешель из IF

Это косяк

Sergey
15.02.2018
15:01:44
неистово, а что?
LSP не нарушено потому что контракт подразумевает такое использование: foreach ($providers as $provider) { if ($provider->supports($data) { return $provider->handle($data); } }

это к слову так же говорит что OCP не нарушено потому что если вдруг появится SomeData2 то появится SomeProcessor2

Объкты должны быть открыты для расширения закрыты от изменения
модешь ли ты связано OCP и такое понятие как низкая связанность?

и второй вопрос - может ли связанность отсутствовать полностью а код только добавляться? ну то есть - возможно ли в принципе НЕ нарушать OCP?

Andrey
15.02.2018
15:04:18
Полностью естественно нет, в конце концов на что тобудет завязано например на front contoller

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

Хотя нет

Хотя хз)

Первое

Tex
15.02.2018
15:08:30
ну вот он не нарушает LSP
Потому что он изначально в support указан? Если SomeData это наследник от Data - это всё тоже сужение входных параметров, просто менее явное, не?

LSP не нарушено потому что контракт подразумевает такое использование: foreach ($providers as $provider) { if ($provider->supports($data) { return $provider->handle($data); } }
ну подразумевает не то чтобы явно. с тем же успехом можно и твой пример с выбросом эксепшена первой строкой тоже вписать как не нарушающий LSP, если это рядом где-то задокументировать.

Andrey
15.02.2018
15:12:35
Все таки нет не нарушает

Google
Vladislav
15.02.2018
15:16:26
Sergey
15.02.2018
15:16:59
ну то есть для LSP и OCP важен не сам класс а именно контекст в котором оно используется

Andrey
15.02.2018
15:17:37
Ну только опять же интерфейсы не классы

Sergey
15.02.2018
15:17:38
так же как для SRP важен не сам класс а выявление ролей которые привязаны к поведению

для контрактов разницы нет

Andrey
15.02.2018
15:18:04
Ну это детали

Все то же нужны абстракции

Sergey
15.02.2018
15:18:58
Все то же нужны абстракции
важный вопрос - зачем

кому они нужны и зачем

Tex
15.02.2018
15:19:17
ну то есть для LSP и OCP важен не сам класс а именно контекст в котором оно используется
соглашусь, но ты читер и не показал использование сразу.

Sergey
15.02.2018
15:19:23
с этой точки зрения ISP очень важный принцип которым часто принебрегают

Andrey
15.02.2018
15:20:02
Без этого у нас связанность повышается

а мы ее стремимся снизить

разве нет?

Sergey
15.02.2018
15:22:35
Все тот же dip
зачем нужен DIP?

Без этого у нас связанность повышается
в пределах одного модуля - это более чем нормально

Google
Andrey
15.02.2018
15:23:08
избежать связанности бизнесс логики с со слоем фреймворка

Sergey
15.02.2018
15:23:33
избежать связанности бизнесс логики с со слоем фреймворка
да, тут нужен DIP, но причем тут все остальное?

по DIP очень удобно ознакомиться с архитектурой портов и адаптеров

Andrey
15.02.2018
15:24:14
Ну если рассматривать твой код

Разве нет

Для DIP подразумевается использование не только на уровне библиотека\фреймворк -> бизнесс логика но и промежуточные уровни тоже

Sergey
15.02.2018
15:48:15
То логичнее всего представить место где вызывается foreach более низким уровнем
ну так у тебя инверсия то есть - интерфейс можешь положить в том модуле который его использует. А если модуль с форичем и так сверху - то инверсия нам тут и не нужна

весь вопрос в том кто от кого зависит

Admin
ERROR: S client not available

Sergey
15.02.2018
15:48:58
просто так делать инверсию между модулями нет смысла если у тебя зависимость и так стабильна

короч в дополнение к принципам SOLID погугли Stable Dependency Principle от того же дяди боба (до того как он решил стричь бабло на брэнде SOLID)

а так же acyclic dependency principle, abstract dependency principle и еще пара штук каких-то

Владимир
15.02.2018
16:57:17
Всем добра! Скажите https://www.magephp.com/ актуален для 4-й версии симфони?

Sergey
15.02.2018
17:22:06
это типа когда ты деплоишь архивчик и он потом такой изнутри разрывается чужим?

но не думаю что есть разница для него 3-я или 4-ая symfony

Владимир
15.02.2018
17:51:36
но не думаю что есть разница для него 3-я или 4-ая symfony
Я тоже, но щупать буду уже завтра. На третьей версии работало как часы

Sergey
15.02.2018
17:52:09
ну... удачи)

Google
Владимир
15.02.2018
17:52:39
))

Shmaltorhbooks
15.02.2018
17:57:58
http://symfony.com/blog/new-in-symfony-4-1-fastest-php-router

Sergey
15.02.2018
17:57:58
https://www.youtube.com/watch?v=kOa_llowQ1c

Shmaltorhbooks
15.02.2018
17:58:19
Вот вот просто взяли и в 77 раз ускорили роутер))

Sergey
15.02.2018
18:00:29
да, просто взяли и ускорили

все это вообще очень просто и единственная прчиина по которой это не делают регулярно - заговор массонов

Dinar
15.02.2018
18:03:03
Правильнее было бы написать up to 77. :))

Alan
15.02.2018
18:17:20
и версию сменить на 77

Andrew
15.02.2018
19:25:40
Symfony 4.1 URL matching is 77 times faster than in previous Symfony versions. This also means that Symfony 4.1 router is now the fastest PHP router,

сщщд

cool

Sergey
15.02.2018
19:26:00
http://symfony.com/blog/new-in-symfony-4-1-fastest-php-router

Konstantin
15.02.2018
21:22:49
@fes0r призываю фесора!

Sergey
15.02.2018
21:23:15
@fes0r призываю фесора!
вы кто такие? я вас не знаю

Konstantin
15.02.2018
21:23:24
ага

Sergey
15.02.2018
21:23:26
спам был?

Konstantin
15.02.2018
21:23:28
знаем мы, проходили уже

дай мне, пожалуйста, ссылку на чат пхп, где ты админ

в котором 1100 + людей

мне помощь нужна по nginx

Sergey
15.02.2018
21:24:16
https://t.me/prophp7

Страница 648 из 1418