@symfony_php

Страница 12 из 1418
Fayozjon [CybernatiC]
07.12.2016
21:48:56
?

Sergey
07.12.2016
21:48:59
пара часов работы, тупой ролик, бесплатная реклама

Oleg
07.12.2016
21:49:20
Ну там ролик датирован началом 2015

Так что похоже просто сняли, потом кто то заметил и понеслось

Google
Sergey
07.12.2016
21:49:39
ну значит.... печалька)

Fayozjon [CybernatiC]
07.12.2016
21:49:45
???

Sergey
07.12.2016
21:49:53
а то у авторов интервью берут на тему "как снимать вирусы"

Oleg
07.12.2016
21:49:54
Просто ПРОВИНЦИАЛЬНАЯ СТУДИЯ

Fayozjon [CybernatiC]
07.12.2016
21:50:06
сука у него даже блеать у сына грива )

?

Sergey
07.12.2016
21:50:25
омг вы о чем?

Oleg
07.12.2016
21:50:38
ну и ещё там слишком много стереотипов конечно. Просто эталонная вебстудия из глубинки

Sergey
07.12.2016
21:50:49
омг вы о чем?
https://sklivvz.com/posts/i-dont-love-the-single-responsibility-principle

глянь)

Sergey
07.12.2016
21:52:54
ок гляну) очередной наброс?

Sergey
07.12.2016
21:53:39
не то что бы

просто ищу инфу по SRP

Google
Sergey
07.12.2016
21:53:54
какие-то интересные мысли

вопросы

это показалось наиболее удачным

Sergey
07.12.2016
21:54:08
SRP это то что превращает код в модули и процедурки)

Sergey
07.12.2016
21:54:19
эм.... нет.

SRP это принцип, который кажется самым простым, но на самом деле является самым сложным

точно так же как LSP является самым простым принципом, хотя формулировка кажется сложной

In other words: classes can only have reasons to change when there are new requirements. But by then, all the bad stuff that's supposed to happen if we violate SRP already happened! What's the advantage of a principle that only applies retroactively? I find this idea is not justified by any real world case.

Sergey
07.12.2016
21:56:18
почему нет? как по мне да. если ему слепо следовать, у тебя в итоге будут почти все классы с одним публичным методом, все остальное - приватное и связи

Sergey
07.12.2016
21:56:42
ну.... это не совсем SRP

это просто снижение связанности

и разделив все на самые мелкие классы ты убъешь зацепление в твоих модулях

мне больше нравится пример с примерением разных ролей при разработке класса

мол мы пишем класс по обработке инвойсов и хернули приватным метод по подсчету налогов туда

и потом подумали "а что если бухгалтер захочет что бы мы налоги просто могли посчитать, без необходимости формировать ажно целый инвойс"

Sergey
07.12.2016
21:59:00
ок у тебя есть класс с методом, который берет из точки А данные(апи), из точки Б(база), мержит их и отдает обратно SRP не нарушено?

Алексей
07.12.2016
21:59:07
ну и ещё там слишком много стереотипов конечно. Просто эталонная вебстудия из глубинки
Я когда в первый раз увидел - прослезился. Ведь в такой же точно работал. Даже чел с такой же гривой директором был)

Sergey
07.12.2016
21:59:33
Sergey
07.12.2016
21:59:41
нет, в том то и дело не спрятаны

в идеале, этот класс нихера не делает, кроме как связывает до кучи 3 компоненты

Google
Sergey
07.12.2016
22:00:07
получатель из А, получатель из Б, мержер. верно ведь?

Sergey
07.12.2016
22:00:12
почему 3 компоненты?

ну как... можно и так

но в целом у тебя есть 2 поставщика данных и мерджер

который является по сути тоже потавщиком данных

я не вижу смысла делать отдельный класс, который руководит процессом

Sergey
07.12.2016
22:01:18
а если этот метод нужен в 3х местах?

Sergey
07.12.2016
22:01:30
эм...

мерджер?

или кто?

Sergey
07.12.2016
22:01:34
или ты предлагаешь мержера не выделять в компоненту отдельную?

Sergey
07.12.2016
22:01:41
ну да, не предлагаю

Sergey
07.12.2016
22:01:42
не, сам класс который руководит балетом

некий фасад

Sergey
07.12.2016
22:02:09
я предлагаю сделать 3 класса. 2 для работы с внешним миром, и объеденяющий результаты

система будет работать только с этим классом

Sergey
07.12.2016
22:02:35
ок. тебе эти 3 класса нужно вызвать в 3х разных местах, в одинаковом порядке

и потом внезапно, требуется 3й источник

Sergey
07.12.2016
22:02:42
и я не вижу сходу причин выделять "мердж" в отдельный класс оставляя сверху класс-пустышку

Google
Sergey
07.12.2016
22:03:03
почему?

Sergey
07.12.2016
22:03:17
логика мержа может быть сложной и ее проще тестировать отдельной компонентой

Sergey
07.12.2016
22:03:23
ээээээм

и что тебе мешает? мокаешь провайдеры данных и готово

Sergey
07.12.2016
22:04:12
почему?
давай более конкретно. есть 2 контроллера и команда есть провайдер А, провайдер Б, мержер мне нужно в 2х контроллерах и команде вызвать А, Б и потом мержер. ты в 3х местах продублируешь вызовы и везде будешь тащить их за собой?

Sergey
07.12.2016
22:04:34
ээээм

мой мерджер сам сходит в A и B, смерджит и вернет

если кому-то надо отдельно A и отдельно B - он их получит

если надо вместе - он попросит мерджер

Sergey
07.12.2016
22:05:41
если для мерджа нужны еще зависимости - тут уже можно думать

но в итоге будет это
нуууу.... как бы не совсем)

это у тебя будет при сегрегации интерфейсов)

а какого размера класс определяется необходимостью вносить в него изменения

какой бы пример привести

ну я люблю приводить пример - класс Base64

у него есть два метода - encode и decode

Sergey
07.12.2016
22:07:27
EncoderInterface, DecoderInterface

Sergey
07.12.2016
22:07:31
причина для изменения этого класса одна - изменения в реализации кодирования/декодирования

Google
Sergey
07.12.2016
22:07:50
EncoderInterface, DecoderInterface
опять ты эти богомерзские суффиксы юзаешь... ну да ладно. Тип так

Sergey
07.12.2016
22:07:57
?

Sergey
07.12.2016
22:08:03
причем если ты поменял кодирование - тебе придется поменять и декодирование

потому что это зависимые операции

точно так же у тебя может быть один жирный класс по работе с внешим сервисом, тупо потому что "тебе так удобнее и если что-то менять то надо и там и там подправить"

но ты можешь налепить 3-4 интерфейса с один-двумя методами и таким образом убрать связанность

так... потиху прихожу к тому что про SRP надо последним рассказывать... или перед open/close

Sergey
07.12.2016
22:10:14
Sergey
07.12.2016
22:10:21
не везде)

я просто тебе говорю что цель SRP не разделить классы так, что бы остался один метод

а наоборот сгруппировать классы так, что бы они были более coheasive

разделять ты будешь при помощи сегрегации интерфейсов

Sergey
07.12.2016
22:12:02
ок. другой пример у тебя сервис по работе с внешим API тебе надо составить запрос, сделать сам запрос, распарсить ответ у API скажем 3 метода как бы ты это реализовал?

Sergey
07.12.2016
22:12:32
хм...

3 метода у API?

и надо парсить результат...

хм....

честно - руководствуясь здравым смыслом я бы сделал сначала один класс, и возможно парочку интерфейсов если мне не нужны все три метода API вместе

(а мне скорее всего не нужны иначе публичный метод был бы только один)

и если вдруг мне нужно будет больше 3-х методов, задумался бы о вынесении логики парсинга в отдельную зависимость и потом уже дробил бы клиент

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