Преимущества и недостатки цепных методов? - PullRequest
8 голосов
/ 29 сентября 2008

Мне очень нравится философия создания цепочек, например, jQuery подчеркивает в своей библиотеке. Я нашел это довольно элегантно и ясно.

Будучи главным разработчиком Java, я всегда задавался вопросом, почему эта практика больше не использовалась в этом языке. Например, интерфейс Collection не был разработан таким образом (для добавления / удаления методов), и я нахожу это довольно печальным.

Есть ли реальные минусы против этой практики или это просто то, чего раньше не хватало "сексуальной привлекательности"?

Ответы [ 7 ]

3 голосов
/ 29 сентября 2008

IMO, отладка болезненна, так как у вас нет промежуточных переменных для проверки.

2 голосов
/ 16 апреля 2009

Существует распространенная проблема с цепочечными методами и наследованием. Предположим, у вас есть класс C, чьи методы F1 (), F2 () и т. Д. Возвращают C. Когда вы выводите класс D из C, вы хотите, чтобы методы F1, F2 и т. Д. Теперь возвращали D, чтобы цепные методы D могли быть вызванным в любую точку цепи.

1 голос
/ 29 сентября 2008

Единственным недостатком является то, что вы теряете тип возвращаемого значения, поэтому цепочка хороша для операций, которые делают вещи, но не годится для операций, которые вычисляют вещи.

Другая проблема заключается в том, что при объединении в цепочку компилятор не может так просто определить тривиальные вызовы функций для встраивания. Но, как я сказал, если ваша цепочка выполняет операции, а не вычисления, то, скорее всего, компилятор все равно ничего не изменит.

1 голос
/ 29 сентября 2008

Мне очень нравится этот подход. Единственный недостаток, о котором я могу думать, это то, что иногда кажется немного неловким «возвращать это» в конце каждого метода. Например, для JQuery разрешено добавлять плагины немного неловко, потому что вы должны сказать: «убедитесь, что вы не забыли свои возвраты !!» но нет хорошего способа поймать его во время компиляции.

0 голосов
/ 29 сентября 2008

Мартин Фаулер обсуждает эту тему как «беглые интерфейсы» на http://www.martinfowler.com/bliki/FluentInterface.html. Одна из главных проблем заключается в том, что беглые интерфейсы предназначены для людей, поэтому такие среды, как Spring, не могут их понять. Упрощенное использование свободного интерфейса обеспечивает удобство сопровождения в одном смысле (удобочитаемость), но теряет удобство обслуживания в другом (гибкость).

0 голосов
/ 29 сентября 2008

Цепные методы - еще один замечательный инструмент в нашей сумке для дизайна. Просто убедитесь, что вы не столкнетесь с общим беспорядком в дизайне «У меня есть молоток, поэтому каждая проблема - гвоздь»

Каждая проблема проектирования не решается цепными методами. Иногда это помогает сделать интерфейс более простым в использовании (т. Е. Упомянутая вами проблема с коллекцией). Иногда это не так. Хитрость в том, чтобы выяснить, к какому случаю относится.

0 голосов
/ 29 сентября 2008

JavaScript - это (более или менее) функциональный язык с функциями первоклассных граждан.
Добавление / удаление методов для объектов, передача функций в качестве параметров, все это естественно для этого языка.

С другой стороны, Java строго OO, функция не может существовать вне класса. Использование наследования, композиции и интерфейсов является более естественным способом для этого языка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...