Command - Query - Separation : CQS
メソッドの為の
オブジェクト指向原則、この原則ではすべてのメソッドが以下のどちらであるべきとされます。
* コマンドメソッド ――― アクション(更新、調整など様々)を実行し、しばしば、オブジェクトの状態を変化させるような副次効果を伴い、void(返り値なし)である。
* クエリメソッド ――― データを呼び出し元に返し、副次効果を伴わない。どのオブジェクトの状態も永続的には変化させてはならない。
しかも、重要なポイントとして、1つのメソッドが両方を兼ね備えていてはいけません。
コマンド/クエリを分離する理由
コマンド/クエリ分離は、コンピュータサイエンスの分野で、望ましい原則として広く認められています。この原則に従うと、プログラムの状態を変化させることなく、より簡単に状態を論理的に判断できるようになるからです。また、設計が単純化され、わかりやすく、見通しがたてやすくなります。たとえば、あるアプリケーションが一貫してコマンド/クエリ分離に従っている場合は、クエリメソッドやゲッタ(取得用)メソッドが何も変更しないこと、および、コマンドメソッドが何も返さないことが予めわかります。単純なパターンこそが拠り所に適していて、意外な事態に困惑させられることもありません。ソフトウェア開発の意外性を抑える原則(Principle of Least Surprise)を侵害しないように気をつける必要があります。
最終更新:2009年06月29日 06:16