単一責任原則は、「クラスには変更の理由が1つあるべきだ」と述べています。
MVCパターンでは、コントローラーの仕事は、ビューとモデルの間を仲介することです。GUIでユーザーが行ったアクションをレポートするためのビューのインターフェースを提供し(ビューの呼び出しを許可するcontroller.specificButtonPressed()
など)、データを操作したり操作を呼び出すためにモデルの適切なメソッドを呼び出すことができます(例model.doSomething()
) 。
この意味は:
- ビューにユーザーアクションを報告するための適切なインターフェイスを提供するために、コントローラーはGUIについて知る必要があります。
- また、モデルの適切なメソッドを呼び出すことができるように、モデルのロジックについて知る必要があります。
つまり、GUIの変更とビジネスロジックの変更という2つの理由があります。
GUIが変更された場合(新しいボタンが追加された場合など)、コントローラーは、ユーザーがこのボタンを押したことをビューが報告できるように新しいメソッドを追加する必要がある場合があります。
また、モデルのビジネスロジックが変更された場合、モデルの正しいメソッドを呼び出すためにコントローラーを変更する必要があります。
そのため、Controllerには2つの変更可能な理由があります。SRPを壊しますか?