このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

メイヤー先生の偉大さとCommand-Query分離

バートランド・メイヤー(Bertrand Meyer)先生は、とにかく偉大です。局所的には、無理筋な例え話や強引な主張で僕らを笑わしてくれるのですが、全体としては実にまったく正しいことを言っています。

メイヤー先生の主張のなかでも、僕がもっとも影響を受けて、はてしなく役立っているのは「Command-Query分離の原則」です。オブジェクトやシステムのインターフェイス&実装を「CommandとQueryに分けろよ」という提案。Commandは値を持たず、副作用(つうか、主作用だけど)だけを持ちます。Queryは副作用を持たず値だけを返します。

Commandとは何であるか、Queryとは何であるか、副作用を持つ/持たないとは何であるか -- これらの概念は、日常直感に頼るだけではなくて、正確に定義することができます。

Queryが副作用を持たないことから、同じQueryを二度発行すると、同じ値が得られることが帰結します。一種のベキ等性です。これは、前もって一度Queryをしておくと、その後の同じQueryの値を(「以前と同じ値だ」と)予測できることを意味します。

もちろん、Queryの後でCommandを実行すると、その後も同じ値である保証はありません。このとき、とあるCommandの実行前の状況から、このCommand実行後に発行したQueryの値が予測できれば便利です。

「Command-Query分離の原則」に付帯する(あるいは「Command-Query分離の原則」が含意する)重要な条件は予測可能性です。それは次のことを意味します。

  • オブジェクトやシステムの現在の状態をQueryにより十分に観測しておけば、与えられたCommand実行後の状態を予測できる。(実行後の状態もまた、Queryにより観測されるものとする。)

別な言い方をすると、オブジェクトやシステムには法則性があり、我々はその法則を書き下すことができて、法則に基づいて将来の変化を予見することができる、できなくてはならない、ということです。

一見は取るに足らないプラクティスに思える「Command-Query分離の原則」を実際に適用してみると、システムの予測可能性の問題が如実に見えてきます。そして、「おーそうか、メイヤー先生は、こういう問題に眼を向ける糸口として『Command-Query分離の原則』を提唱なさったのか」と感じるのです。「Command-Query分離の原則」は、すぐに実行できるプラクティスですが、「取るに足らない」ものなどではなくて、実に奥深く、工学と自然科学の本質に通じるものなのです。メイヤー先生は偉大だ。