MVC を銀行にたとえて説明しているブログ記事を読みました。MVC フレームワーク (CakePHP) を使用した Web アプリケーション開発の経験が数か月あるため、基本は理解できましたが、ロジックを配置する場所に欠陥のあるアプローチを取っていると思わせるテーマが見え始めました。
- ファット モデル、スキニー コントローラ
- モデルにできるだけ多くのビジネス ロジックを保持する
私のアプリでは、モデルは拒食症で、コントローラーは肥満です。コントローラーにはすべてのビジネス ロジックがあり、モデルには関連付けと検証ルール以外には何もありません。
コントローラーをスキャンすると、モデルに含まれるはずの多くのロジックを特定できるようになりました。
- アプリにはアイテムを含むリストがあり、アイテムをランク付けできます。リストをランク順に並べ替えるソートロジックはコントローラーにあります。
- 同様に、アイテム (Item モデル) にもイメージ (Image モデル) があります。各アイテムにはデフォルトの画像があります (items テーブルの image_id で指定)。アイテムが画像とともに表示される場合、デフォルトの画像が最初に表示されます。コントローラーでこれを行うロジックがあります。
- リストが表示されると、関連するリストがサイドバーに表示されます。どのリストが関連しているかを判断するロジックはコントローラーにあります。
今私の質問に:
- 上記の例で、モデルに属するコントローラーに現在あるロジックのインスタンスであると考えて、正しい方向に進んでいますか?
- モデルに入れる必要がある、Web アプリに共通のロジックの他の領域は何ですか?
- この問題を特定し、設計パターンを変更することは、戦いの半分であると確信していますが、上で示した例を取り上げて、そのロジックをモデルに移そうと決めたとしても、どこから始めればよいかわかりません。ここにコードを投稿したり、優れた学習リソースにリンクしたりして、誰かが私を正しい方向に向けることができますか? CakePHP 固有のヘルプは素晴らしいですが、MVC で十分であると確信しています。