DSL을 한동안 주의 깊게 연구한 결과, JavaScript에서 가장 많이 사용되는 것 중 하나는 아마도 체인 호출(Method Chaining)일 것입니다. 흥미롭게도 Martin Flower는 다음과 같이 지적했습니다.
나는 또한 일반적인 오해를 발견했습니다. 많은 사람들이 유창한 인터페이스를 메소드 체이닝과 동일시하는 것 같습니다. 확실히 체이닝은 유창한 인터페이스와 함께 사용하는 일반적인 기술이지만 진정한 유창함은 그 이상입니다.
많은 사람들이 연결된 통화를 유창한 인터페이스와 동일시합니다. 그러나 체인콜은 Fluent 인터페이스의 일반적인 방식이며 실제 Fluent 인터페이스는 그 이상입니다.
DSL 부드러운 인터페이스
Fluent 인터페이스의 원래 의도는 읽기 쉬운 API를 구축하는 것입니다. 결국 코드는 사람들이 읽을 수 있도록 작성됩니다.
마찬가지로 앞서 메소드 캐스케이딩을 통해 DOM을 어떻게 조작했는지 간단히 살펴보겠습니다
var btn = document.createElement("BUTTON"); // <버튼> 요소 만들기
var t = document.createTextNode("CLICK ME"); // 텍스트 노드 생성
btn.appendChild(t);
document.body.appendChild(btn); // 에 > 추가
jQuery로 작성하면 다음과 같습니다
$('
').append("클릭하세요");
잠깐
이제 가장 간단한 DSL을 보여주는 간단한 예를 만들 수 있습니다
Func = (함수() {
This.add = function(){
console.log('1');
이것을 돌려주세요;
};
This.result = 함수(){
console.log('2');
이것을 돌려주세요;
};
이것을 돌려주세요;
});
var func = new Func();
func.add().result();
그러나 이것은 표현식 생성기처럼 보입니다.
DSL 표현식 생성기
표현식 생성기 개체는 일련의 일관된 인터페이스를 제공한 다음 일관된 인터페이스 호출을 기본 명령-쿼리 API에 대한 호출로 변환합니다.
이러한 API는 데이터베이스에 관한 일부 API에서 볼 수 있습니다.
var 쿼리 =
SQL('이름 선택, 위젯의 설명')
.WHERE('가격
'clearance = ', $(params.clearance))
.ORDERBY('이름 asc');
연쇄 호출의 한 가지 문제는 끝이 없다는 점입니다. 위 코드에는 끝이 없어 매우 혼란스럽습니다. . 쿼리를 추가하고 종료하면 좋은 결과가 나올 것 같습니다.
기타
메서드 캐스케이드
다음과 같이 표현됩니다.
a.b();
a.c();