Le chaînage de méthode est la pratique de méthodes de l'objet de retour de l'objet lui-même dans l'ordre pour que le résultat soit appelé pour une autre méthode. Comme ceci:
participant.addSchedule(events[1]).addSchedule(events[2]).setStatus('attending').save()
Cela semble être considéré comme une bonne pratique, car il produit un code lisible, ou une "interface fluide". Cependant, pour moi, il semble plutôt de casser l'objet appelant la notation implicite par l'orientation de l'objet lui-même - que le code résultant ne représente pas l'exécution des actions à la suite d'une précédente méthode, qui est la façon dont le code orienté objet est généralement s'attendre à ce travail:
participant.getSchedule('monday').saveTo('monnday.file')
Cette différence parvient à créer deux significations différentes pour la dot notation de "l'appel de l'objet": Dans le contexte de l'enchaînement, l'exemple ci-dessus serait de lire que l'enregistrement du participant de l'objet, même si l'exemple est en fait destiné à enregistrer la planification de l'objet reçu par getSchedule.
Je comprends que la différence ici est de savoir si la méthode appelée devrait revenir à quelque chose ou pas (auquel cas, il serait de retour l'objet appelé lui-même pour chaînage). Mais ces deux cas ne se distinguent pas de la notation elle-même, seulement à partir de la sémantique de la méthode appelée. Lorsque la méthode de chaînage n'est pas utilisé, je peux toujours savoir qu'un appel de méthode fonctionne sur quelque chose en rapport avec le résultat de l'appel précédent - avec chaînage de cette hypothèse, les pauses, et je sémantiquement processus de l'ensemble de la chaîne de comprendre ce que l'objet même d'être appelé vraiment. Par exemple:
participant.attend(event).setNotifications('silent').getSocialStream('twitter').postStatus('Joining '+event.name).follow(event.getSocialId('twitter'))
Il y a les deux derniers appels de méthode reportez-vous à la suite de getSocialStream, tandis que ceux d'avant reportez-vous au participant. Peut-être que c'est une mauvaise pratique de l'écriture de chaînes où les changements de contexte (est-il?), mais même alors, vous aurez à vérifier constamment si point-chaînes semblables sont en fait rester dans le même contexte, ou ne fonctionnent que sur le résultat.
Pour moi, il semble que, bien que la méthode de chaînage superficiellement n'produire un code lisible, la surcharge de la signification de la dot notation seuls les résultats dans une plus grande confusion. Comme je ne me considère pas comme un expert en programmation, je suppose que la faute est la mienne. Donc: Ce qui me manque? Dois-je comprendre la méthode de chaînage quelque chose de mauvais? Y at-il des cas où la méthode de chaînage est particulièrement bonne, ou quelques-uns où il est particulièrement mauvais?
Note: je comprends que cette question pourrait être lu comme l'expression d'une opinion masqué sous la forme d'une question. Il, cependant, n'est - sincèrement, je veux comprendre pourquoi le chaînage est considéré comme une bonne pratique, et où dois-je aller de mal en pensant qu'il rompt le inhérents orientée objet de la notation.