Цепь метода - это практика объектных методов, возвращающих сам объект, чтобы результат вызывался для другого метода. Вот так:
participant.addSchedule(events[1]).addSchedule(events[2]).setStatus('attending').save()
Это, по-видимому, считается хорошей практикой, поскольку он создает читаемый код или "свободный интерфейс". Однако мне вместо этого кажется, что он нарушает нотацию вызова объекта, подразумеваемую самой ориентацией объекта: полученный код не представляет выполнение действий для результата предыдущего метода, а именно, как ожидается, будет работать объектно-ориентированный код:
participant.getSchedule('monday').saveTo('monnday.file')
Это различие позволяет создать два разных значения для точечной нотации "вызов результирующего объекта": в контексте цепочки приведенный выше пример будет считаться сохранением объекта-участника, хотя этот пример на самом деле предназначен для сохранить объект расписания, полученный методом getSchedule.
Я понимаю, что здесь разница заключается в том, следует ли ожидать, что вызванный метод что-то вернет или нет (в этом случае он вернет сам вызываемый объект для цепочки). Но эти два случая не отличаются от самих обозначений, а только из семантики вызываемых методов. Когда цепочка методов не используется, я всегда могу знать, что вызов метода работает над чем-то, связанным с результатом предыдущего вызова - с цепочкой, это допущение прерывается, и я должен семантически обрабатывать всю цепочку, чтобы понять, что представляет собой фактический объект называется действительно. Например:
participant.attend(event).setNotifications('silent').getSocialStream('twitter').postStatus('Joining '+event.name).follow(event.getSocialId('twitter'))
Здесь два последних вызова метода относятся к результату getSocialStream, тогда как те, которые перед ним относятся к участнику. Может быть, это плохая практика, чтобы на самом деле писать цепочки, где изменяется контекст (это?), Но даже тогда вам придется постоянно проверять, находятся ли точечные цепочки, которые выглядят одинаково, на самом деле сохраняются в одном контексте или работают только с результатом.
Мне кажется, что, хотя цепочка процессов поверхностно создает читаемый код, перегрузка значения точечной нотации приводит лишь к большей путанице. Поскольку я не считаю себя гуру программирования, я полагаю, что моя вина. Итак: Что мне не хватает? Я понимаю, что метод цепочки как-то не так? Существуют ли случаи, когда метод цепочки особенно хорош, или где-то особенно плохо?
Sidenote: Я понимаю, что этот вопрос можно было бы прочитать как высказывание мнения, замаскированного под вопрос. Это, однако, не так - я действительно хочу понять, почему цепочка считается хорошей практикой, и где я ошибаюсь, думая, что она разрушает присущую объектно-ориентированную нотацию.