しばらくDSLを慎重に勉強した後、いくつかの興味深いことを見つけました。 JavaScriptが最も使用するのは、おそらくチェーンコール(メソッドチェーン、つまりメソッドチェーン)です。興味深いことに、マーティンフラワーは指摘しました:
コードコピーは次のとおりです。
私はまた、一般的な誤解に気づいたことに気づきました - 多くの人々は、メソッドチェーンと流fluentな界面に等しいようです。確かに、チェーンは流fluentインターフェイスで使用する一般的な手法ですが、真の流encyさはそれ以上のものです。
多くの人は、チェーンコールを滑らかなインターフェイスと同一視しています。ただし、チェーンコールは滑らかなインターフェイスの一般的な方法であり、実際の滑らかなインターフェイスが少しだけではありません。
DSLスムーズなインターフェイス
スムーズなインターフェイスの当初の意図は、読みやすいAPIを構築することです。結局のところ、コードは人々が見ることができるように書かれています。
同様に、以前にDOMを見てみましょう。メソッドカスケードを使用して操作しました
コードコピーは次のとおりです。
var btn = document.createelement( "button"); // <button>要素を作成します
var t = document.createTextNode( "Click Me"); //テキストノードを作成します
btn.appendChild(t); //テキストを<button>に追加します
document.body.AppendChild(BTN); // <button>を<body>に追加します
そして、あなたがjqueryで書くなら、それだけです
コードコピーは次のとおりです。
$( '<span>')。append( "click me");
等
そのため、最も単純なDSLを表示する簡単な例を作成できます
コードコピーは次のとおりです。
func =(function(){
this.add = function(){
console.log( '1');
これを返します。
};
this.result = function(){
console.log( '2');
これを返します。
};
これを返します。
});
var func = new func();
func.add()。result();
ただし、これは式ジェネレーターのように見えます。
DSL発現ジェネレーター
式ジェネレーターオブジェクトは、一貫性のあるインターフェイスのセットを提供し、その後、基礎となるコマンドクエリAPIへの呼び出しに変換されます。
このようなAPIでは、データベースに関する一部のAPIで確認できます。
コードコピーは次のとおりです。
var query =
sql( 'ウィジェットからの名前を選択する')
.where( 'price <'、$(params.max_price)、および、
'clearance ='、$(params.clearance))
.ORDERBY( 'name asc');
チェーンコールが終了することに問題があります。上記と同じコードで終わりませんでしたが、これは非常に混乱しています。 。クエリと終了を追加することは良い結果のようです。
他の
メソッドカスケード
次のように表現されています。
コードコピーは次のとおりです。
ab();
ac();