
Sergey
15.02.2018
14:55:44

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

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

Google

Tex
15.02.2018
15:00:03

Sergey
15.02.2018
15:00:14

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

Sergey
15.02.2018
15:00:49

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?

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

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

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

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

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

Sergey
15.02.2018
15:22:35

Google

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

Sergey
15.02.2018
15:23:33
по DIP очень удобно ознакомиться с архитектурой портов и адаптеров

Andrey
15.02.2018
15:24:14
Ну если рассматривать твой код
Разве нет
Для DIP подразумевается использование не только на уровне библиотека\фреймворк -> бизнесс логика
но и промежуточные уровни тоже

Sergey
15.02.2018
15:48:15
весь вопрос в том кто от кого зависит

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

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

Alex
15.02.2018
19:29:00

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

Sergey
15.02.2018
21:23:15

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