太ったモデル、痩せたコントローラ、MVCデザインパターン
2023-10-12 21:35:28
質問
私はちょうど ブログ記事 を読んだところ、MVCを銀行に例えて説明していました。私は MVC フレームワーク (CakePHP) を使用した Web アプリケーション開発の経験が数か月あるので、基本は理解していますが、ロジックを置く場所に欠陥のあるアプローチを取っていると思わせるテーマが見え始めています。
- 太ったモデル、痩せたコントローラ
- できるだけ多くのビジネスロジックをモデル内に保持します。
私のアプリでは、モデルは拒食症で、コントローラは肥満症です。私はすべてのビジネスロジックをコントローラに置き、モデルには関連付けと検証ルール以外何もありません。
コントローラに目を通すと、おそらくモデルに入れるべきロジックがたくさんあることがわかります。
- このアプリにはリストがあり、リストにはアイテムが含まれており、アイテムはランク付けされることがあります。リストをランク順に並べるソートロジックはコントローラにあります。
- 同様に、アイテム(Itemモデル)は画像(Imageモデル)も持っています。各アイテムは、デフォルトの画像(itemsテーブルのimage_idで指定)を持つことができます。アイテムがその画像とともに表示されるとき、デフォルトの画像が最初に表示されるようにします。これを行うロジックをコントローラに記述しています。
- リストが表示されると、関連するリストがサイドバーに表示されます。どのリストが関連するのかを判断するロジックはコントローラにあります。
では、質問に入ります。
- 私が上にあげた例では、それらはモデルに属するコントローラに存在するロジックのインスタンスであると考えるのは正しい道でしょうか?
- ウェブアプリに共通する、モデルに入れるべき他のロジック領域は何でしょうか?
- この問題を特定し、デザインパターンを変更することが戦いの半分であることは確かですが、私が上にあげたこれらの例を取り、そのロジックをモデルに移動しようと決めたとしても、どこから始めればよいのかわかりません。どなたか、ここにコードを投稿したり、良い学習リソースにリンクしたりして、正しい方向性を示していただけませんか?CakePHP特有のヘルプがあれば最高ですが、MVCであれば何でも十分だと思います。
どのように解決するのですか?
フレームワークの仕様に関係するものもあるため、正しい答えを出すのは少し難しいです。
少なくともCakePHPの観点では。
-
はい
-
データまたはデータ操作を扱うものはすべてモデルの中にあるべきです。CakePHPで言えば、単純なfind()メソッドはどうでしょうか?... もしそれが何か特別なこと(例えば'条件'の特定のセットを呼び出す)をする可能性があるなら、それはモデルのメソッドの中でラップする良い言い訳になります。
-
残念ながら、簡単な答えは決してありませんし、コードのリファクタリングは自然なプロセスです。時々、目が覚めて、quot;holy macaroni... that should be in the model!
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SOFEAとは?
-
[解決済み] MVC :: モデルとは何ですか?
-
[解決済み] MVCとMVVMの違いは何ですか?[クローズド]
-
[解決済み】DTO(Data Transfer Object)とは何ですか?)
-
[解決済み] オブザーバー、Pub/Sub、データバインディングの違いについて
-
[解決済み] MVCとN層アーキテクチャの比較
-
[解決済み] MVCはデザインパターンかアーキテクチャーパターンか?
-
[解決済み] Qtはなぜモデル/ビューという用語を間違って使っているのか?
-
[解決済み] 差動実行の仕組みを教えてください。
-
MVCS - モデル・ビュー・コントローラ・サービス