나는 샤워를하고 뭔가 생각했다.지연/약속은 Demeter의 법칙을 어기는 것을 촉진합니까?
이연/약속 패턴은 here 언급 한 바와 같이, 체인 전화 기능에 개발자를 허용함으로써, callback hell을 감소하는 것입니다 : - 만약 내가 잘못 정정 해줘 - 내 머리의 상단에서
Parse.User.logIn("user", "pass").then(function(user) {
return query.find();
}).then(function(results) {
return results[0].save({ key: value });
}).then(function(result) {
// the object was saved.
});
하지만 지연/약속을 사용하는 것이 Demeter의 법칙을 어기는 쉬운 방법이라고 생각하십니까?
데메테르의 법칙 상태 :
- 객체 자체 : 물체
방법은 방법을 호출 할 수있다.
- 메서드의 인수입니다.
- 메서드 내에서 생성 된 모든 개체입니다.
- 개체의 모든 직접 속성/필드.
각 장치는 다른 장치에 대한 지식이 제한되어 있어야합니다 : 단위는 현재 장치와 "밀접하게"관련되어 있습니다. 또는 : 각 단위는 의 친구에게만 이야기해야합니다. 낯선 사람과 이야기하지 마세요.
의견이 있으십니까?
는 업데이트 2013년 12월 1일 :
A는 내 질문의 버전을 요약. Promise 프레임 워크는 비동기 코딩을 단순화하고 "callback hell"을 피하도록 설계되었습니다. Promise의 가장 유용한 기능 중 하나는 위 예제에서 볼 수 있듯이 .then()
을 사용하여 이벤트를 체인 호출 할 수 있다는 것입니다.
모든 코드/기능은 이제 약속을 사용하는 감안할 때 (벤자민 Gruenbaum 아래 (저자) 현재하고있는처럼), 그것은 등
을 .then().then().then()
를 이동하여 연쇄 호출 기능을 정말 쉽게 그것을 열 수 없습니다 chain-call 함수가 서로 뒤 따르는 코드를 작성하면 (.then().then().then()
) Demeter의 법칙을 어기는 법을 설명하는 텍스트 북이어야합니다.
내 질문에; Promise 프레임 워크가 Demeter의 법칙을 악용하거나 파기하기 쉽도록/개장/개선합니까?
"샤워 진술"이 여기에 어떤 도움이 될지는 확실하지 않습니다. :) – benzonico
자바 스크립트 기능은 폐쇄 (매우 편리한 패러다임)를 불가능하게하는 Demeter의 법칙을 따르지 않아도됩니다. 또 다른 의미에서, apply/call을 사용하면 실제로 법에서 "객체"가 무엇인지 다시 정의 할 수 있으므로 실제 실행 전에 JS를 준수 할 수 있습니다. 어느 쪽이든 그것은 중요하지 않습니다. – dandavis
저는 이것이 당신이 왜 데메테르의 법을 어기는지 왜 생각하는지 모르겠습니다. 모든 메소드는 인자로 전달 된 함수 만 호출하고 (객체 지향 목록에서 두 번째 옵션 일반화) 객체를 반환합니다. 체인에서 이러한 객체는 자신의 메서드를 호출합니다. – kybernetikos