Методы трубопровода в цепочке методов

Недавно я реализовал это поведение для yii: https://github.com/garex/yii-pipe-behavior

Его основная цель - разрешить цепочку методов для методов, которые являются геттерами. Что-то в таком стиле может быть реализовано на любом другом языке / фреймворке. Это больше похоже на синтаксический сахар для фанатов цепочки методов.

Из ридми:

Например, у владельца есть метод gimmeAll, который возвращает массив, который мы хотим преобразовать методом другого владельца, пусть это будет toSomething. По старинке мы называем:

$bla = Something::create()->toSomething(Something::create()->one()->two()->three()->gimmeAll());

Но с таким поведением мы можем сделать это более элегантным способом:

$bla = Something::create()->one()->two()->three()->pipe('gimmeAll')->unpipe('toSomething', '{r}');

Если метод unpiped имеет единственный параметр, то мы можем опустить параметр '{r}' и вызвать его так:

$bla = Something::create()->one()->two()->three()->pipe('gimmeAll')->unpipe('toSomething');

Итак, мои вопросы:

  1. Неужели это может быть полезно? Я реализовал это поздно ночью и до сих пор не уверен.

  2. Может быть, «велосипед»? Может быть, такое есть на другом языке / фреймворке?


person gaRex    schedule 08.01.2014    source источник
comment
Личное мнение: мне не очень нравится, когда классы / методы / функции вызываются строками. Трудно найти (не говоря уже о рефакторинге) в большинстве достойных IDE, что делает поиск ошибок немного сложнее. Если это экономит довольно много циклов ЦП при создании нового объекта, это стоит рассмотреть, но если нет, то, на мой взгляд, создание с ним чего-то нового заслуживает того, чтобы стать новым утверждением.   -  person Wrikken    schedule 08.01.2014
comment
@Wrikken Я тоже к этому склоняюсь. В качестве обходного пути эта опция может быть реализована, но не как поведение - только как метод родительского класса: Something :: create () - ›bla-› pipe ('{r}') - ›someMethod () -› toSomething ( '{r}'), где pipe () возвращает не владельца, а оболочку, которая передает все вызовы владельцам. Но это что-то странное :)   -  person gaRex    schedule 08.01.2014
comment
поток @ yiiforum: yiiframework.com/forum/index.php/topic/   -  person gaRex    schedule 14.01.2014


Ответы (1)


На основе результатов и ответов ветка на форуме yii

Нет, это не бесполезно и даже лишнее. Некоторые цитаты оттуда:

Я думаю, что сохранение результатов в переменной и передача их другому методу намного чище, читабельнее, лучше поддерживается IDE и просто более разумно.

class Something
{
        public function gimmeAllToSomething()
        {
                return $this->toSomething($this->gimmeAll());
        }
}

$bla = Something::create()->one()->two()->tree()->gimmeAllToSomething();

Это немного больше кода для ввода и тестирования, но лучшие практики программирования не сводятся к тому, чтобы печатать меньше.


В настоящее время в реальном сценарии я также использовал подход gimmeAllToSomething (). Так что мы можем думать об этом как о двери, в которую вам не нужно заходить.

person gaRex    schedule 16.01.2014