Questions tagged «method-chaining»


18
方法链接-为什么这是一个好习惯?
方法链接是对象方法返回对象本身以使结果被另一个方法调用的实践。像这样: 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的结果,而之前的方法引用了参与者。实际在上下文发生变化的地方写链可能不是一个好习惯(是吗?),但是即使如此,您也必须不断检查看起来相似的点链实际上是否在同一个上下文中,或者仅在结果上起作用。 在我看来,虽然表面上的方法链接确实会产生可读的代码,但点符号含义的重载只会导致更多的混乱。由于我不认为自己是编程专家,所以我认为这是我的错。所以:我想念什么?我是否理解方法链接有些错误?在某些情况下方法链接特别好还是在某些情况下特别糟糕? 旁注:我理解这个问题可以理解为掩盖为问题的意见陈述。但是,它不是-我真正地想了解为什么链被认为是一种好习惯,而在认为链打破了固有的面向对象表示法的地方,我犯了错。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.