kasei_sanのブログ

かせいさんのIT系のおぼえがきです。胡乱の方はnoteとtwitterへ

MVCのおさらいと、RailsのMVCについて説明する

先にまとめ

MVCの目的

コードの再利用性と関心事の分離

  • コードの再利用性 : ビジネスロジックをModelに詰め込むことで、コードの再利用性を上げる
  • 関心事の分離 : 役割を分けることで見通しを良くする

MVCの役割

本来のSmalltalkにおけるGUIアプリ開発の場合

RailsMVCとは違うところがあるので注意!!

Model

View

  • ユーザインターフェースの表示

Controller

  • 入力をModelへのメッセージに変換して、Modelに伝える

処理の流れ

  • 何かしらの入力イベントをControllerが受け取る
  • ControllerがModelにメッセージを投げる
  • Modelはメッセージにもとづきビジネスロジックを実行
  • Modelはデータ更新イベントをViewに投げる
  • Viewは、Modelからデータを取ってきて、画面を更新する

RailsMVC

微妙に違う

RailsMVCで勘違いしがちなこと

Model ≠ ActiveRecord

じゃあ ActiveRecord って何よ?

Railsでは、ModelとDBとのやり取り、および、Model内のデータの抽象化にActiveRecordを使っている

Controllerがビジネスロジックを持つ

Modelはデータを保持するだけで、Controllerがビジネスロジックを持つと勘違いしてしまう

Controllerはビジネスロジックを持たない!!

MVCでは、Modelがビジネスロジックを持つ

Modelが持つもの : 出力がコンソールやモバイルに変わったとしても変わらない部分(ビジネスロジック)

Controllerのお仕事は以下の2つだけ

結果、Controllerがシンプルになり、Modelにビジネスロジックが詰め込まれる

これを、 Skinny Controller, Fat Model といい、Railはこの設計思想を推奨している

RailsWayに乗るなら Skinny Controller, Fat Model

Fat Model でも、詰め込む先が違うだけで、神classになることに変わりはないのでは?

そのためにRailsは、Modelの中身を仕事・役割毎に分離する方法を色々持ってる

  • ActiveRecord::Callbacks
  • ActiveModel::EachValidator
  • ActiveModel::Validator
  • Formオブジェクト

参考

参考