«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
getNthOrEqualIdFromThisOnTheRightByStatusChannelbotIdAndMessageSource Аноним 2019/01/22 13:05:06  №1332576 1
Screenshot43.png (25, 788x409)
409x788
Кажется у меня проблема.
Я не знаю как коротко называть методы.
Это уже совсем пиздец какой-то блять.
Что делать? Как бы вы назвали этот метод?

Просто убрать ByStatusChannelbotIdAndMessageSource нельзя, ибо там и по другим критериям методы есть.
Аноним 2019/01/22 13:07:13  №1332577 2
>>1332576
А я то думал это у меня длинные названия. Теперь спокоен.
Аноним 2019/01/22 13:16:46  №1332589 3
>>1332576
Впринципе тебе было бы удобнее билдер критериев иметь, чем городить эти обертки с детальным описанием в названии.
С билдером мог бы сделать например
$builder->nthOrEqualFrom(...params)->right()->byStatus(status)->byMessageSource(source)->get();
и это более переиспользуемый и гибкий вариант. Правда я понятия не имею насколько это реально у тебя по коду реализовать.
Ответы: >>1332594 >>1332683
Аноним 2019/01/22 13:20:49  №1332594 4
>>1332589
Как такое сделать? Как паттерн называется?
Ответы: >>1332606
Аноним 2019/01/22 13:22:04  №1332598 5
>>1332576
А нахуя вообще вливать всю суть в название метода?
Бери пример с си-блядей. Они буквально несколько (1-3) букв берут от слова и разбивают его _. Да, это может показаться трудночитаемым, но в си все функции из stdlib хуевочитаемые да и нахуй не нужны, но у тебя же ЕБАНЫЙ ВЕБШТОРМ, навел мышкой на метой и у тебя уже документация подсветилась.
Ответы: >>1332648
Аноним 2019/01/22 13:29:24  №1332606 6
>>1332594
Билдер и называется, только придется фантазию проявить. Примеры и объяснения по учебнику не для таких ситуаций. Наверняка видел аналоги в виде QueryBuilder всяких. Суть та же.
Ответы: >>1332628
Аноним 2019/01/22 13:43:56  №1332628 7
>>1332606
Вообще я знаю паттерн, (но забыл название, лол), который позволяет создавать цепочки вызовов методов типа как ты выше написал. Если вкратце, суть в том, чтобы возвращать $this везде.

Но вообще это уже какая-то ORM нахуй получается, в рот я ебал еще и орм на коленке писать тут, совсем говноедство какое-то будет, никто блядь не поймет потом мой код
Ответы: >>1332631 >>1332635
Аноним 2019/01/22 13:47:00  №1332631 8
>>1332628
Что-то типа такого?

$foo = () => $var1 => $var2 => $var3;
Аноним 2019/01/22 13:50:16  №1332635 9
>>1332628
Ну вот в твоей ситуации это как бы билдер критерии для метода getNthOrEqualFromThis. Вариантов много, вон аж 6 параметров, один из которых массив. Делаешь class ShittyBuilder {
private $id;
private $otherParam;
private $otherOtherParam;
// other params

public function byId($id) {$this->id = $id; return $this;}
// other methods
public function fetch() {
return $someInstance->getNthOrEqual($allYourParams);
}
}

Вот тебе и билдер конкретно для того страшного метода с кучей параметров. Как ты понимаешь это на коленке и сделать можно лучше во много раз, просто как пример что тут нет ничего сложного. Полноценная орм и прочее, кстати, тоже пригодились бы. Раз у тебя ее нет можешь взять да доктрину подтянуть, там много чего есть.
Ответы: >>1332642
Аноним 2019/01/22 13:56:59  №1332642 10
>>1332635
Тогда придется на тонны других методов тоже отдельные классы писать? Это же просто ебанутся как долго.

Насчет орм и доктрины - да. В следующий раз, пожалуй и буду их юзать. Сейчас уже нет смысла тонны кода переписывать на нее.
Ответы: >>1332643
Аноним 2019/01/22 13:59:34  №1332643 11
>>1332642
Ну как посмотреть. Вот у тебя есть метод getNthOrEqualFromThis. Первая же обертка над ним получилась с длиннющим именем. А таких оберток, судя по количеству параметров, может быть до ебаной жопы. Помоему лучше уж один раз сделать даже самый глупенький билдер и дергать через него, чем делать 100500 длиннющих методов вместо этого каждый раз. Сам же сказал, что есть и другие критерии к нему, значит проблема не в одном только том конкретном методе.
Ответы: >>1332647 >>1332681
Аноним 2019/01/22 14:03:32  №1332647 12
>>1332643
Но тогда это будет практически эквивалентно прямым запросам в БД, только через обертку.
Инкапсуляция, мам...

Нужно создать несколько методов с выборками по определенным критериям, а не просто разрешить ебать таблицу в рот и жопу как хочешь.
Ответы: >>1332651 >>1332653
Аноним 2019/01/22 14:06:06  №1332648 13
>>1332598
А мне нравится это сишное iInterfaceName и всякое подобное. Коротко и понятно, главное контекст знать.
Аноним 2019/01/22 14:10:52  №1332651 14
>>1332647
А через эти методы типа только в писечку ебешь, но никак не в рот и жопу как содомит какой-то? Чтобы полноценно выбрать решение надо разобраться в причинах, которые привели к той обертке, а не только на метод имени Льва Толстого посмотреть.
Ответы: >>1332676
Аноним 2019/01/22 14:11:52  №1332653 15
Аноним 2019/01/22 14:38:27  №1332676 16
>>1332651
>А через эти методы типа только в писечку ебешь, но никак не в рот и жопу
Ну вообще да, в том и смысл!
Ответы: >>1332677
Аноним 2019/01/22 14:43:01  №1332677 17
>>1332676
Я как-то не вижу этого. Обертка с именем на целый фанфик по сути прячет всего 1.5 реальных параметра, притом сама целых 5 принимает. И реально спрятанный параметр всего лишь бул. Судя по всему есть еще и вторая такая, где _is_less тру. Шо так ебать можно, шо эдак.
Аноним 2019/01/22 14:46:04  №1332680 18
>>1332576

У тебя еще в phpdoc лишние @param, которые не несут никакой информации и которые стоит убрать.

getNeighbourId/getNthId. Насчет bystatus... - это же явно можно назвать короче. Например, getNthIdByBotAndSource
Аноним 2019/01/22 14:47:33  №1332681 19
>>1332643
По-моему, лучше вообще писать такой код, чтобы не опускаться до оберток.
Аноним 2019/01/22 14:51:30  №1332683 20
>>1332589

Выше дали совет про билдер.

А если неохота делать билдер, можно сделать передачу массива:

findNthId(['source' => ...., 'botId' => ...]);

или сделать объект-фильтр (отличие от билдера: билдер создает объект, фильтр ничего не создает):

$filter = new TgFilter;
$filter->bySource(...);
findNthId($filter);

или

findNthId(byTgFilter()->withSource(...)->withBotId(....));
findNthId(TgFilter::create()->withSource(...)->withBotId(....));

Как тебе? Без сверхсложных билдеров, объект фильтра типизируемый, документируемый и проверяемый.

Для примера, поиск элементов в клиенте Селениум от фейсбука: https://github.com/facebook/php-webdriver

$element = $driver->findElement(WebDriverBy::id('element id'));

Ответы: >>1332688
Аноним 2019/01/22 14:54:15  №1332685 21
>>1332576

Также, возможно эту функцию просто стоит по другому назвать? Вроде getSimilarMessages или как-то так?
Аноним 2019/01/22 14:58:48  №1332688 22
>>1332683
Впринципе то, что я ему предложил больше похоже на фильтр как раз. Запомню это название, а то хуйню одну другой назвал.