24
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【自分なりのNOTE】Controllerの概念。区切り方。MVCモデル設計の話し。

Last updated at Posted at 2016-09-27

Controllerの概念

モデルやビューは実体が複数あることは明確だ。
一方controllerは、実体がなく、モデルとビューの橋渡し役だ。区切り方は作り手に委ねられている。

controller自体が1つの実体とするなら、
人間の可読性を無視するなら、1つのファイルにまとめてもいいのだ。(パスだって変えようと思えば/usersや/messagesなど変えられるのでエンドユーザーにはユーザーフレンドリーが担保される)
逆説的に述べると、可読性のためにも分割していると言っていい。(開発者のためのForDeveloper設計)

今までの色々な意見(分け方)

a. controllerはあくまで人間の認識に合わせる。ユーザーやチームが想定しやすいところに置くのが一番。(ForDeveloper, ForHuman設計)

  • URLからcontrollerが想定できるようにしたい(ForDeveloper設計)
  • でなければ、/rankingsなのにusers_controllerは特定がしんどい(チームの共通認識だいじ。)
  • しかし、コンテキスト(意味合い)に重きをおくと、人によって想定するものが違う可能性は多いにあり、こわい。

b. 1つのモデルに対する一連の操作をまとめたものがcontrollerだ。(モデル依存)

  • メインとして出力するモデルがxxxならxxx_controllerという考え。
    • では、companiesとusers両者同じ画面に同じ重要度でだす場合は?
  • カテゴリ一覧は/categories。だが、カテゴリに入っているユーザー一覧はusers_constrollerから出すべき
    • なぜならそのユーザー一覧は、Viewにとっては同じusersを出力してるに過ぎないのだから。
    • ソートとフィルターはクエリ(?filter=xxxx)を使う

c. 可読性向上のために分割する。(ForDeveloper設計)

  • ファットになったり混沌としてきたら、aのように適材適所に分ける。

controllerの分け方。あなたはどうする?

以下はあなたの想像力を膨らませるための例材。

model

  • messages
  • users
  • categories
  • inquiries(問合せ一覧)

view

  • メッセージ一覧
  • ユーザー一覧
  • メッセージをくれたユーザー一覧
  • ユーザーのランキングを表示
  • カテゴリ一覧
  • カテゴリ一覧をみながら特定のユーザーのメッセージ一覧を見て、メッセージが気に入ったらそのユーザーをカテゴリに追加する画面
  • 問合せ一覧
  • カテゴリ一覧をみながら特定のユーザーのメッセージ一覧を見て、メッセージが気に入ったらそのユーザーをカテゴリに追加する画面。ついでに問合せ一覧も出力しちゃう♡
24
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?