Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

原則 | Command/Query Separation(コマンド・クエリ分離の原則)

概要

Command/Query Separation(コマンド・クエリ分離の原則)

詳細

Command/Query SeparationについてはBertrand Meyer氏が書籍「Object Oriented Software Construction」で触れたのが始まり。

基本的な考え方は、オブジェクトのメソッドは以下の二つのカテゴリに分けるべき、ということです。

・Command
システムの状態を変える。何も値を返さない。
・Query
値を返却する。システムの状態は変えない。

Commandという用語は他の様々な意味で用いられるため、Martin Fowler氏は
この文脈でのCommandを「modifiers」もしくは「mutators」と呼ぶことを好んでいるようです。

しかし、常にこの設計を適用すればいいわけではなく例外もある。
例えばスタックのpush/popは状態を変化させつつ値も返します。
その他に、DSLなどでよくつかわれるメソッドチェーン・Fluent Interfaceなどもこの設計に反しますが有用なイディオムです。