@prophp7

Страница 644 из 1387
Sergey
27.09.2017
11:13:35
я так application-level сервисы делаю

Sergey
27.09.2017
11:13:50
идеальный метод когда тебе нужен класс-операция
когда нужна функция с интерфейсом))

Sergey
27.09.2017
11:14:28
когда нужна функция с интерфейсом))
ну на самом деле функция с интерфейсом и/или зависимостями своими

Sergey
27.09.2017
11:14:50
ну эт если регать как сервис

Google
Sergey
27.09.2017
11:14:56
ну я регаю как сервис)

а такого что бы мне где-то нужна была просто функция с интерфейсом - такого небыло

ну и слишком высока стоимость для "type safty"

F01134H
27.09.2017
11:15:49
идеальный метод когда тебе нужен класс-операция
а зачем может понадобиться класс-операция? Ну, например

Sergey
27.09.2017
11:16:16
Dmitry
27.09.2017
11:16:25
завернуть в анонимную функцию как бы более наглядно и гибко ;)

Sergey
27.09.2017
11:16:29
хорошо подходит для оркестрации действиями

Dmitry
27.09.2017
11:16:42
имхо этот __invoke вообще ввели как костыль для замыканий

F01134H
27.09.2017
11:16:50
Sergey
27.09.2017
11:16:59
Dmitry
27.09.2017
11:17:05
что завернуть?)
вызов у нужного объекта нужного метода... и передать это туда, что ждет callable

F01134H
27.09.2017
11:17:09
Не, я просто из интереса спрашиваю

Google
Sergey
27.09.2017
11:17:40
вызов у нужного объекта нужного метода... и передать это туда, что ждет callable
у тебя есть штука которая на вход принимает нечто. Это нечто тебе надо вызвать. И есть штуки которые предоставляют аргументы для этого нечта.

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

Dmitry
27.09.2017
11:18:04
ну пусть передают замыкания

Sergey
27.09.2017
11:18:04
и тут __invoke приходит на помощь

Sergey
27.09.2017
11:18:19
завернуть в анонимную функцию как бы более наглядно и гибко ;)
ты можешь сделать интерфейс, где будет только invoke с нужными параметрами и принимать только такое в аргументах. с анонимной функцией ты шопопало можно передать, не очень безопасно

Sergey
27.09.2017
11:18:42
ну пусть передают замыкания
$operation = function (...$args) use ($handler) { return $handler->handle(...$args); };

тип так?

большей бойлерплейта богу бойлерплейта

Dmitry
27.09.2017
11:19:36
ну юзать костыли, которые приделали для создания замыкания в пхр 5.3, ибо замыкание - это инстанс класса - оно лучше, и читабельнее, ага ;)

Sergey
27.09.2017
11:19:59
interface MyCoolPolymorphicFunction { public function __invoke(int $myCoolArgument): string; }

Dmitry
27.09.2017
11:20:24
и? где ты его использовать будешь?

Sergey
27.09.2017
11:20:54
ну юзать костыли, которые приделали для создания замыкания в пхр 5.3, ибо замыкание - это инстанс класса - оно лучше, и читабельнее, ага ;)
а обмазываться лямбдами поверх того что и так могло работать как анонимная функция просто потому что ты думаешь что это кастыль - это типа норм

не нравится - не юзай. Если у тебя нет кейсов для __invoke то у меня они есть

Dmitry
27.09.2017
11:21:25
ну да... так как для этого мне не нужны "специальные классы", я могу использовать любые ;)

Sergey
27.09.2017
11:21:52
и с моими

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

я их использую в контроллерах так: public function registerUserAction(RegisterUserHandler $handler, RegisterUserRequest $request) { $userId = $handler($request); return new UserDetailsResource($userId); }

ты же предлагаешь мне делать так: $userId = $handler->handle($request);

причем.... просто так

Google
Sergey
27.09.2017
11:23:22
потому что тебе не нравится invoke

Dmitry
27.09.2017
11:24:04
ну... вообще это выгляди наоборот, "я присрал сюда invoke, так как мне визуально вдруг понравилось и выглядит "по взрослому" ;))) извини

Sergey
27.09.2017
11:24:13
пока у тебя не появятся доводы получше чем "ну это ж кастыль", хотя бы объяснения минусов которые ты видишь - можно даже не продолжать разговор.

Dmitry
27.09.2017
11:24:26
У тебя есть интерфейс, в нем ты можешь определить метод и вызывать его.

И без проблем сможешь навестить на один класс два таких интерфейса ;) просто имена методов помнять

Sergey
27.09.2017
11:25:00
У тебя есть интерфейс, в нем ты можешь определить метод и вызывать его.
1. не могу, потому что это приведет к нарушению LSP 2. конкретно в данном случае интерфейс не нужен и ничем не поможет

F01134H
27.09.2017
11:25:12
return new UserDetailsResource($userId); а вот тут кста вызовется конструктор или invoke? Или оба?

Sergey
27.09.2017
11:25:28
F01134H
27.09.2017
11:25:37
не знаю, если честно

конструктор то наверняка

Sergey
27.09.2017
11:25:42
ну почитай доки

Sergey
27.09.2017
11:25:48
что значит new в php

Dmitry
27.09.2017
11:25:56
Шо? типа я запихнул в интерфейс __invoke вместо имени метода и это сразу перестало нарушать LSP? какой-то бред ;)

Sergey
27.09.2017
11:26:07
это у @Enleur кейсы такие видать есть

Sergey
27.09.2017
11:26:24
на пхп редко)

Dmitry
27.09.2017
11:26:26
interface MyCoolPolymorphicFunction ;)

Sergey
27.09.2017
11:26:45
это просто пример что ты так сможешь замутить полиморфную функцию, late binding и при этом проверка на соответствие типов

я все еще не вижу аргументов

Google
Sergey
27.09.2017
11:27:13
чем тебе не нравится __invoke

по пунктам

объективно

Dmitry
27.09.2017
11:27:28
у invoke по сути одна задача - возможность передать объект туда, где нужно callable... все остальное - это как бы раскраски, которые лишь ухудшают читабельность

Dmitry
27.09.2017
11:27:57
какой аргумент использовать getFoo вместо __get() { ... if (foo) ? :)

Pavel
27.09.2017
11:28:34
так никто же не вызывает явно __invoke чаще всего

Dmitry
27.09.2017
11:28:42
ну вот у меня взвывает когнитивный диссонанс - это уже аргумент ;)

Admin
ERROR: S client not available

Sergey
27.09.2017
11:29:34
какой аргумент использовать getFoo вместо __get() { ... if (foo) ? :)
никакого, тут действует аксиома эскобара. И то и то - симптом нарушения закона деметры и ломает information hiding

с __invoke же мы ничего не нарушаем и ничего не ломаем.

другой вопрос - как ты без __invoke реализуешь нечто что должно вести себя как функция (потому что зачем выдумывать название для метода когда у тебя название класса и так определяет поведение) которой нужны какие-то зависимости и ты хочешь их спрятать. Предлагаешь спрятать все в лямбду где-то на уровень выше? увы наши DI контейнеры так не умеют и вообще в php с этим все плохо

ну вот у меня взвывает когнитивный диссонанс - это уже аргумент ;)
то есть тебя только тот факт что вызов метода происходит неявно смущает? как же ты тогда конструкторами пользуешься не могу себе представить

Sergo
27.09.2017
11:32:34
У кого-то было такое, что в коде вызывается функция substr_count, а на деле mb_substr_count() ? у них разные аргументы, в результате получается Warning: mb_substr_count(): Unknown encoding "0" in Это в сорсах Твига, класс Compiler

Впечатление будто где-то овверрайд, но хз

$iD
27.09.2017
11:33:26
мне нравится идея с репозиторием и __invoke

https://youtu.be/rzGeNYC3oz0?t=2676

метку поставил

Google
Sergey
27.09.2017
11:34:44
я знаю идею делать интерфейс репозитория таким же как у коллекций, а с __invoke в репосах не знаком

Dmitry
27.09.2017
11:35:19
есть разницы между использования когда нужна функция (аргумент ждет что-то callable) и искусственного использования как у тебя в примере, когда причин использовать как функцию вообще нет кроме блажи программиста

Sergo
27.09.2017
11:35:31
если ты врубил override в настройках mbstring nо так и будет
Ничего вроде не врубал, на апаче другие сайты норм, но сейчас проверю. Спасибо за наводку

Sergey
27.09.2017
11:35:45
метку поставил
а, не для репозиториев а для запросов?

да, активно юзаю

$iD
27.09.2017
11:35:56
+

$iD
27.09.2017
11:36:15
потому что у меня горит уже от одно репозитория на 10к строк

Sergey
27.09.2017
11:36:44
потому что у меня горит уже от одно репозитория на 10к строк
мы ж уже поднимали этот вопрос - делигирование ответственности с репозитория в объекты-запросы это норм тема

другой пример - нотификейшены

Sergey
27.09.2017
11:37:13
$notificator->send(new WelcomeNotification($user->email(), $user->id()));

$iD
27.09.2017
11:37:20
к слову, на текущем проекте мы пока тоже этого не делаем

жрём кактус

Dmitry
27.09.2017
11:37:27
вред в том, что кому-то после тебя этот код читать и долго думать, почему у аргумента описан интерфейс, а мы его как функцию

когда ответ "причин нет, просто программисту так показалось симпатичнее" тогда неверное использование

Sergey
27.09.2017
11:38:21
вред в том, что кому-то после тебя этот код читать и долго думать, почему у аргумента описан интерфейс, а мы его как функцию
за полтора года что я юзаю __invoke ни разу не сталкивался с такими проблемами. За это время через проект прошло где-то 10 новых разработчиков с разным уровнем и бэкграундом

мне кажется что "вред надуман"

либо приведи конкретный пример

Dmitry
27.09.2017
11:39:14
и ты в состоянии ответить, почему так лучше, чем вызов метода?

Sergey
27.09.2017
11:40:15
и ты в состоянии ответить, почему так лучше, чем вызов метода?
мне не надо придумывать имя методу - это уже плюс. Минусов не вижу.

Страница 644 из 1387