메소드 체인 은 다른 메소드에 대해 결과를 호출하기 위해 오브젝트 자체를 리턴하는 오브젝트 메소드의 실습입니다. 이처럼 :
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의 결과를 참조하지만 이전의 메소드 호출은 참여자를 참조합니다. 어쩌면 컨텍스트가 변경되는 체인을 실제로 작성하는 것은 좋지 않습니다 (그렇지 않습니까?). 그렇더라도 비슷한 모양의 도트 체인이 실제로 동일한 컨텍스트 내에 있는지 또는 결과에 대해서만 작동하는지 지속적으로 확인해야합니다 .
나에게 메소드 체인이 피상적으로 읽을 수있는 코드를 생성하는 동안 점 표기법의 의미를 오버로드하면 혼란이 더 커질 것 같습니다. 내가 프로그래밍 전문가라고 생각하지 않기 때문에 나는 내 잘못이라고 생각한다. 그래서 : 나는 무엇을 놓치고 있습니까? 어떻게 든 메소드 체인을 잘못 이해합니까? 메소드 체인이 특히 좋은 경우 또는 특히 나쁜 경우가 있습니까?
주석 :이 질문은 질문으로 가려진 의견 진술로 읽을 수 있음을 이해합니다. 그러나 체인이 좋은 습관으로 여겨지는 이유를 이해하고 고유 한 객체 지향 표기법을 위반한다고 생각하면 어디에서 잘못되었는지 이해하고 싶습니다.
.
있으면 mehtod 반환 값을 무시하고 항상 동일한 객체를 사용하여 연결된 메서드를 호출하는 것이 실제로 필요하지 않습니다.