1コントローラー1アクション
MVCのコントローラにおける、守ると良いルール
例外は、シンプルなCRUDが揃ったリソースの制御のとき
この場合でも一つでもメソッドが増えるなら、分離し始めたほうが良い
DHHはどのようにRailsのコントローラを書くのか | POSTD
ここで解説してる
Rails作ったDHHが言うとる
翻訳が読みづらいので英語も見たほうがいい
How DHH organizes his Rails controllers - Jerome's Adventures in Software
2016/2
railsってもっと前から流行ってた気がするけど、そこらへんの時代ではどう認識されてたんだ?
Buckblog: Skinny Controller, Fat Model
これは、LCOM、凝集度という観点からも説明されるルールである
実際に書けば、そりゃそうだろと思う
こんなことDHHが言って無くても気づかないといけない
当たり前すぎるのに、初心者や判断力が足りない人は、コントローラを分けるべきかどうか迷ってしまう
価値がない方の選択肢が混じったまま迷わせる点で、非常に厄介
なんで分けるべきか、という考えが生まれるかと言うと、コントローラをクラスで表現するから
クラスのインスタンス状態があるせいで不要な選択を選ばされる羽目になっている
エントリーポイントに対して、1つの関数を対応付ければそれで十分なのに
共通化は関数なりモジュールシステム使うなり、クラス使わずにやるべき
Laravelだとシングルアクションコントローラと呼ぶ
phpの__invokeを使って、ルーティングではクラス自体を指定する
書き手が、動きゃ良いで書いてしまうと気づけ無いのだと思う
読んで分かるように書く
そのためには使ってないものは同じ場所に置くなという当たり前の感覚に従えば自然とそうなる
論理的凝集にあたる?
いつからここらへんの話あるだろう?miyamonz.icon
単一責任の原則という言葉もあるが、
これも微妙に理解が難しい & 1コントローラ1アクションのケースに当てはまっているのだっけ?
元々SOLID原則としてRobert C. Martinがまとめたものだが、
氏の著書見ると、なんか一般的な説明と違うような気がする
clean architecture p.81で「この法則が誤解される原因は名前があまり良くなかったことだ」と言っている
wikipediaには
The single-responsibility principle: "There should never be more than one reason for a class to change." In other words, every class should have only one responsibility.
https://en.wikipedia.org/wiki/SOLID
Buckblog: Skinny Controller, Fat Model
コントローラを別ファイル(別クラス)に分けろ、というのとは別話題だが
https://chatgpt.com/c/6830218c-12a4-8009-bfcb-cc0d174a8960