DSLs Chapter4 を読んだ

Domain-Specific Languages (Addison-Wesley Signature Series (Fowler))

Domain-Specific Languages (Addison-Wesley Signature Series (Fowler))

Internal DSLの アプローチについてあれこれ書かれている。 Expression Builderから話が進んでいく。

4.1

DSLを理解する上でキーとなる、Fluent Interface と Command-Query APIsの違いが書かれている。
Command Query は,参照系と更新系のメソッドは混ぜずに分割しましょという設計指針。
Fluent Interface を実現する Method Chaining は、この原則を破ってまで、分かりやすさを向上させようとしている。

メソッドのネーミングでも、違い出てくる。Command-Queryは、その1メソッドが独立して何をするかを明記することが基本だが、Fluent Interfaceは、 記述が sentence になるように メソッド名同士のバランスを考慮する。

4.2

Semantic Model 層と それを包み込む Pasring Layer層は混ぜずに分けることを勧めている。 モデルに混ぜると混乱しやすい、Pasring Layerを 独立して、ブラッシュアップさせることができるなどの理由から。

Pasringという言葉の使い方について補足も。

Internal DSLの場合、Pasring Layerは、ただのテキストではなく、プログラミング言語が解釈可能なテキストで書かれている。
Pasring Layerをプログラミング言語の処理系が解釈し Semantic Model をつくる形になる。

あとは書ききれん。。


Nested Function, Method Chaining, Literal Map, Literal List, Function Sequence,Context Variables, Object Scoping, Adaptive Model, Nested Closures, Annotation, Dynamic Reception..... と多数のパタンがダイジェスト出ててくる。パタンにページ番号が付いてるので、うしろの要約とCode 例を斜め読みしつつ、Chapter 4に戻って、読み進めるのが、コツかな。 Ruby 好きなら楽しめる章です。