6月 102019
 

コンポーネント凝集性の原則に閉鎖性共通の原則(CCP)もあるが、どちらも概念としては同じである。

モジュールはたったひとつのアクターに対して責務を負うべきである。
(Clean Architecture / Robert C.Martin)

クラスレベルでは、単一責任の原則(Single Responsibility Principle)。
コンポーネントレベルでは、閉鎖性共通の原則(Common Closure Principle)。

SOLID 原則は知っていても、どのようにクラスを定義するか、コンポーネントを分割するか、つまりどこに境界線を引くべきかを悩むことは多い。
単一責任、変更する理由は一つだけであるべきと言われても、その「責任」がふわっとしていて定まらないなんてことはよくある。

Clean Architecture の上記部分を読んでようやく、「責任」には当然「対象」が存在する事に気付いた。
つまりクラスにしろコンポーネントにしろ、必ず利用するアクターは存在する。

アクターとは、同じ変更理由を持ったユーザー等の集まりだ。
となると、モジュールが複数のアクターに対して責任を持ってしまうと複数の変更理由が発生する可能性が出てくる。
なので、モジュールが単一のアクターに対して責任を持つように境界線を引くべきなのだ。
一見よく似た処理や画面だったとしても、アクターが異なれば異なる変更理由で変更が入ることがあるため、分けた方が良い。

複数のアクターが全く同じように使う共通的なモジュールもあるだろうが、それは恐らくより抽象化されたアクター(汎化アクター)がそれに対応するのだろう。