한동안 DSL을주의 깊게 공부 한 후 몇 가지 흥미로운 것들을 발견했습니다. JavaScript가 가장 많이 사용하는 것은 아마도 체인 호출 (메소드 체인, 즉 메소드 체인) 일 것입니다. 흥미롭게도 Martin Flower는 다음을 지적했습니다.
코드 사본은 다음과 같습니다.
나는 또한 일반적인 오해를 발견했습니다. 많은 사람들이 메소드 체인과 유창한 인터페이스와 동일하게 보입니다. 확실히 체인은 유창한 인터페이스와 함께 사용하는 일반적인 기술이지만 진정한 유창함은 그 이상입니다.
많은 사람들이 매끄러운 인터페이스와 체인 호출을 동일시합니다. 그러나 체인 호출은 부드러운 인터페이스를위한 일반적인 방법이며 약간의 매끄러운 인터페이스 이상이 있습니다.
DSL 스무드 인터페이스
부드러운 인터페이스의 원래 의도는 읽기 가능한 API를 구축하는 것입니다. 결국 코드는 사람들이 볼 수 있도록 작성됩니다.
마찬가지로 DOM을 이전에 살펴 보겠습니다. 우리는 메소드 캐스케이드를 사용하여 작동했습니다.
코드 사본은 다음과 같습니다.
var btn = document.createElement ( "버튼"); // <버튼> 요소를 만듭니다
var t = document.creatextNode ( "클릭을 클릭하십시오"); // 텍스트 노드를 만듭니다
btn.appendchild (t); // 텍스트를 <button>에 추가하십시오
document.body.appendChild (BTN); // <버튼>에 <body>를 부여하십시오
그리고 당신이 jQuery로 글을 쓰면 그게 다야
코드 사본은 다음과 같습니다.
$ ( '<Span>'). Append ( "Click Me");
등.
그래서 우리는 가장 간단한 DSL을 보여줄 간단한 예제를 만들 수 있습니다.
코드 사본은 다음과 같습니다.
func = (function () {
this.add = function () {
Console.log ( '1');
이것을 반환하십시오;
};
this.result = function () {
Console.log ( '2');
이것을 반환하십시오;
};
이것을 반환하십시오;
});
var func = 새로운 func ();
func.add (). result ();
그러나 이것은 표현식 생성기처럼 보입니다.
DSL 발현 생성기
표현식 생성기 객체는 일련의 코 히어 런트 인터페이스 세트를 제공하며, 그런 다음 기본 명령 쿼리 API로 호출로 변환됩니다.
이러한 API는 데이터베이스에 대해 일부 API에서 볼 수 있습니다.
코드 사본은 다음과 같습니다.
var query =
SQL ( '선택 이름, 위젯에서 DESC')
.Where ( 'price <', $ (params.max_price) 및
'클리어런스 =', $ (params.clearance))
.OrderBy ( '이름 asc');
체인 호출에 문제가 있습니다. 우리는 위와 같은 코드로 끝나지 않았으며, 이는 매우 혼란 스럽습니다. . 쿼리와 끝을 추가하는 것이 좋은 결과 인 것 같습니다.
다른
방법 캐스케이드
다음과 같이 표현됩니다.
코드 사본은 다음과 같습니다.
ab ();
ac ();