[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PSR-15
Страницы: 1, 2
Arh
Цитата (twin @ 15.01.2018 - 21:51)
Тут дока
Ну и ушат помоев замечания и критика ожидаема и желанна.  smile.gif

Какой то дикий костыль. Первым запускается третий мидлвар, у него в коде вызываются другие. wtf?

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

Они на то и мидлвары, что бы можно было любой заменить и переместить куда угодно, они вообще ничего не знают о существовании других мидлваров. То что у тебя на картинке как "обычное приложение", вот там можно их местами менять, можно добавить ещё 50 штук в начало, третью функцию удалить, а вместо неё поставить 715ю. А то что на второй части картинки, там что 3я функция она монолитна и будет запущена в любом случае? Даже если первая выполнит задачу и прервет стек? "Мидлвары наоборот, получают результат после запуска следующего."

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Ты так ничего и не понял.

Цитата (Arh @ 26.01.2018 - 08:09)
Первым запускается третий мидлвар, у него в коде вызываются другие. wtf?
Именно так. Вся фишка в том, первым запускается последний. Запрос проходит всю цепочку и из него же возвращается.

Что касается картинок.
Цитата (Arh @ 26.01.2018 - 08:09)
То что у тебя на картинке как "обычное приложение", вот там можно их местами менять, можно добавить ещё 50 штук в начало, третью функцию удалить, а вместо неё поставить 715ю.
Нет, нельзя. Вся печенюшка в том, что функция именована. И убрав её или заменив, тебе придется менять код запускающей функции (изменить имя) В мидлварах как раз можно вполне безболезненно убрать любой, или вообще все, оставить один. Потому что у него есть вход и выход. А остальное - промежуточный софт.


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
twin
Цитата
Нет, нельзя. Вся печенюшка в том, что функция именована. И убрав её или заменив, тебе придется менять код запускающей функции (изменить имя)

Анонимные функции


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Так на них мидлвары и построены в PHP. Вернее идея из них родилась.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
Цитата
Так на них мидлвары и построены в PHP. Вернее идея из них родилась.

Ну да, первая часть картинки.

Ладно, почему ты выбрал именно такую реализацию? С чего вдруг такие правила что обязательно нужно выполнить код последнего и что мидлвар не запустится, пока не отработает следующий в цепочке.

Мидлвары это просто стек функций вместо одной, которые в порядке очереди обрабатывают твою команду. Им даже не обязательно возвращать ответ, всё зависит от задачи.

$middwareList[] = function(){/*ничего не делаю*/};
$middwareList[] = function(){/*ничего не делаю*/};
$middwareList[] = function(){/*пишу в базу*/};
$middwareList[] = function(){/*отправляю почту*/};
$middwareList[] = function(){/*ничего не делаю*/};

foreach ($middwareList as $item) {
$item();
}


Или могут переваривать ответ друг друга.

$middwareList[] = function($data){return ++$data;};
$middwareList[] = function(){/*ничего не делаю*/};
$middwareList[] = function(){/*пишу в базу*/};
$middwareList[] = function(){/*отправляю почту*/};
$middwareList[] = function(){/*ничего не делаю*/};

$data = 1;

foreach ($middwareList as $item) {

if ($result = $item($data)) {
$data = $result;
}

}


echo $data;


Или добавить ещё 100500 настроек и сложностей

$middwareList[] = [
'break' => false,
'function' => function($data){
return $data;
}
];
$middwareList[] = [
'break' => true,
'function' => function($data){
return 1;
}
];
$middwareList[] = [
'function' => function($data){
return 2;
}
];

$data = 0;

foreach ($middwareList as $item) {

if ($result = $item['function']($data)) {

$data = $result;

if (!empty($item['break'])) {
break;
}

}

}


echo $data;


Сама идея при этом простая как foreach. Возможность заменить любой элемент, не переписывая код. Возможность навесить ещё логики на событие не переписывая код. Возможность сделать checkbox в админке что бы включать/выключать логику. Возможность сделать drag and drop в админке, что бы менять мидлвары местами.

А у тебя получается во первых частный случай реализации,а не "вот это мидлвары, а это обычное приложение",
во вторых какой то костыльный (сначала последний, потом второй, потом пи делённое на третий),
в третьих какой то монолитный, потому что они должны знать кто перед ним, кто после, что бы первый не делал BEFORE,
в четвёртых какой то не оптимальный, потому что первый выполнил задачу и нужно остановить стек, что бы ещё 100500 мидлваров не работали над решением того, что уже решено, а у тебя получается "Мидлвары наоборот, получают результат после запуска следующего", то есть первый не выполнит задачу, пока не сработает второй, второй не выполнит пока не сработает 100500й, в итоге они год решали задачу, никто не смог, последний тоже сдался, теперь первый может спокойно отработать.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.