1コントローラーに1アクションのみを記述したコントローラー。 責務の切り分けに役立つ。
そのクラスが成すことを期待される機能。 publicメソッドは外部から使用される可能性がある、つまり責務を表すもの。 逆にprotectedメソッドやprivateメソッドは外部から使用される可能性はない。
そのクラスの責務ではないメソッドはprotectedやprivateで隠蔽しよう。
例えばSomethingを扱うSomethingControllerがあり、その中には Somethingを検索するsearchSomething()メソッドと Somethingを作成するcreateSomething()メソッドがあるとする。
searchSomething()に関するコードを修正した場合、 同じクラス内に含まれるcreateSomething()にも影響が及ぶ可能性は否定できない。
これらをSearchSomethingActionとCreateSomethingActionという別々のクラスとして定義することで、 Somethingの検索に関するコードはSearchSomethingActionクラスだけを見ればよく、 Somethingの作成に関するコードはCreateSomethingActionクラスだけを見ればいい という状態を目指す。
1つのクラスに1つの責務を持たせるのは、SOLID原則のS(単一責任の原則)にあたる。