DSLは基本的に、特定のドメインの問題を解決するために独自の小さなサブ言語を作成しています。これは、メソッドチェーンを使用して解決されます。ドットと括弧がオプションである言語は、これらの表現をより自然に見えるようにするのに役立ちます。また、ビルダーパターンに似ている場合もあります。DSLはそれ自体が言語ではなく、呼び出しをより自明にするためにAPIに適用するパターンです。
一例として、Guice、Guiceユーザーガイドhttp://docs.google.com/View?docid=dd2fhx4z_5df5hw8には、インターフェースが実装にどのようにバインドされているか、およびどのコンテキストでバインドされているかについての説明があります。
もう1つの一般的な例は、クエリ言語です。例えば:
NewsDAO.writtenBy("someUser").before("someDate").updateStatus("Deleted")
実装では、各メソッドが新しいQueryオブジェクトを返すか、これだけで内部的に更新されることを想像してください。いつでも、たとえばrows()を使用してすべての行を取得するか、上記で行ったようにupdateSomeFieldを使用して、チェーンを終了できます。どちらも結果オブジェクトを返します。
上記のGuiceの例も確認することをお勧めします。ここで呼び出すたびに、新しいオプションが設定された新しいタイプが返されます。優れたIDEを使用すると、各ポイントでどのオプションを使用できるかが明確になり、完了することができます。
編集:多くの人がDSLを独自のパーサーを備えた新しいシンプルな単一目的言語と見なしているようです。私は常にDSLを、操作を表現するための規則としてメソッドチェーンを使用するものとして関連付けています。