/note/tech

単一責任の原則(Single responsibility principle)について、もう一度考える

単一責任の法則とは、クラス(コードの一行一行)に対応するアクターを一種類に絞ることによってそのような面倒を引き起こすのを防ぐものです。上記の例ではクラスをメソッドαとメソッドβを持つそれぞれのクラスに分割すべきというわけです。

つまり「あるモジュールを変更する理由(=アクターからの変更要求)はたったひとつだけであるべきである」ということになります。こうすればシステムを要求変更の影響を特定の部分に封じ込めて他に影響を与えないロバストな構造にすることが出来ます。

長々考えてきたのですが、結論としては以下のとおりです。

  • 単一責任の法則は、「クラスには一つのアクター」という原則である
  • アクターはシステムに対する変更要求の出発点である
  • アクターとクラスの分轄を連動させることによって変更箇所を局在化して仕様変更に強いシステムにできる
  • 要求分析と設計は一心胴体(※原文ママ)

ひとつのクラスは一種類のアクターからだけ使われるべきというのは納得できる。

それを突き詰めていくとクラスの機能は特定の使われ方に特化した小さなものになっていく(つまり凝集性が高くなる)ことになる。

とはいえ、アクターの考え方は頭を捻る部分もあって、すんなり理解されるようなものではなさそう。