DSL / Fluent and command-query APIs


DSL

流れるようなインタフェースとコマンドクエリAPI

一言要約

内部DSLに用いられる流れるようなインタフェースは、従来常識とされてきたコマンドクエリAPIと全く違う考え方である。

要約

  • 流れるようなインタフェースとして有名なのはメソッドチェーン。
  • しかし、このように長く続くメソッド呼び出しは、従来バッドプラクティスと見なされていたもの。
  • とはいえ、関数シーケンスを用いても同じことができるのだから、本質的にはシンタックスの問題ではない。
  • Bertrand Meyersの"Object-Oriented Software Construction"では、オブジェクトは窓とボタンを備えたブラックボックスと説明されている。
    • 当たり前すぎて名前がなかったが、これをコマンドクエリインタフェースと呼ぶ。
  • これに対して、流れるようなインタフェースは全く違う考え方をとっている。
    • オブジェクトを編み上げることができる節を使って文章を構築する。
  • 両者の違いは確固としたものではないが、区別しておくことは有効。
  • 優れたインタフェースに関するルールが異なる。
    • メソッドチェーンはコマンドクエリ分離ルールに違反する。
  • ネーミングの方法も異なる。
    • コマンドクエリAPIは独立したコンテキストで意味を持たなければならない。
    • 流れるようなインタフェースは文章の中で意味を持つ必要がある。

ファウラーへのフィードバック

担当者のつぶやき

  • 導入部分も一応訳しておきました。論点は以下2点です。
    • ホスト言語によって制限される内部DSL
    • 内部DSLと流れるようなインタフェース
  • 新しい概念に対して適切な名前を付けた上で、古い概念と明確に対比させるということについては、ファウラー先生はさすがですね。
  • 当日欠席します、すみません。面白そうな所であるだけに残念。

みんなの突っ込み