1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CQS原則まとめ

Posted at

CQS原則とは

CQS(Command Query Separation:コマンド/クエリ分離)原則とは、
「メソッドはコマンドとクエリに分離して、両者が混在するようなメソッドは作らない」
というルール

コマンドとは何かしら「状態」の変化を伴うメソッドのことで、クエリとは今の「状態」を結果として返すメソッドのこと。
SQLで例えると、INSEETやUPDATEがレコードの状態を変化させるコマンドに相当するメソッドで、SELECTがレコードの状態を返してくれるクエリに相当するメソッドになる。

コマンドとクエリが分離されておらず、状態を変化させるうえに結果を返すようなメソッドが存在すると、意図しないところで状態が変化したり、どの時点で状態が変化したのか特定するのを難しくしたりする。

具体例

例えば何かしらのチェックを行う際、チェックに引っかかったものに対して特定の処理を行いたいとする。
このような場合、CQS原則に違反して、チェック(クエリ)と処理(コマンド)ひとつのメソッドで済ませてしまいたくなる。
時間帯に適切なあいさつをするプログラムをCQS原則に従って記述すると次のようになる。

import datetime

# あいさつを返すメソッド(コマンド)
def greeting(時刻):
  if 
    print('おはよう')
  elif 
    print('こんにちは')
  elif 
    print('こんばんわ')

# 時間を問い合わせるメソッド(クエリ)
def now_time():
  return 現在の時刻

if __name__ == '__main__':
  greeting(now_time())

# 実行結果(今が朝であれば)
# => おはよう

このように実装すると、greetingがコマンドで、now_timeがクエリになっていることがわかる。

CQS原則の性質

上の例のように簡単な処理の場合CQS原則に従うメリットは少ないが、後々処理が複雑になってきた際に、どこで状態が変化しているのか特定するのが容易になる。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?