web-dev-qa-db-ja.com

MVC ::モデルとは何ですか?

私はモデルについて決定を下さなければならない段階にあります。

モデルは、すべてのデータベース操作を行うために使用するものであることを認識しています。

しかし、モデルはこれに制限されていますか?

これによって私は意味します。

それらはデータベースの相互作用のみを目的としていますか、それともすべての外部データ操作(外部APIからのデータなど)を目的としていますか?

23
Hailwood

たとえば、Djangoでは、モデルはデータリレーション(テーブル)にマップし、場合によってはテーブルをブリッジするクラスです(たとえば、多対多のリレーションの場合)。

同じクラスに、対応するデータを操作するためのメソッドを含めることができます。それ自体でモデルを定義していない追加のクラスが存在する場合がありますが、データにアクセスしてフィルタリングするメソッドがあります。

ただし、MVCの用語モデルは、データ構造とそれらにアクセスする方法の説明に一般的に適用されます。

フレームワークは抽象的な用語をいくらか曲げているかもしれません。たとえば、ビューDjango=呼び出しは実際にはコントローラー関数であり、プレゼンテーションを定義するエンティティはビューではなくテンプレートと呼ばれます。

10
Evgeny

MVCパラダイムは、次の構造でアプリケーションを編成する設計パターンです。

モデル:これは、データモデル、アルゴリズムを保持する場所です。たとえば、スプレッドシートアプリケーションを作成する場合、スプレッドシートのデータ構造を維持します。モデルに計算エンジンがあり、スプレッドシートをモデルに保存して読み込むためのコードがあります。これらのモデルクラスは、たとえばデータの圧縮を行うコードがある場合など、他のアプリケーションで再利用できる可能性があります。

ビュー(複数可):これらは、データ(UI)を視覚化するコードの一部です。スプレッドシートでは、セルA1からZ100などの典型的なスプレッドシートビューがあります。チャートビューを使用してデータを視覚化することもできます。などビューは他のアプリケーションでも再利用できます。たとえば、派手なチャートビューを再利用できます。

コントローラは、ビューをモデルに接続するものです。これはおそらく再利用性が最も低い部分です。コントローラはモデルについて知っており、表示するビューを知っています。通常、コントローラーは、ユーザーがアプリを操作するときにビューが呼び出すコールバックをセットアップします。次に、コントローラーはモデルから情報を取得し、ビューを更新します。

これらのガイドラインに従えば、モデルを変更できる可能性があります。たとえば、ファイルをディスクに保存するモデルから、UIを変更せずにクラウドにファイルを保存するモデルに変更すると...理論的には。モデルを変更せずに新しいビューを追加することもできます。モデルの単体テストまたは回帰テストを作成することもできます。

厳密なルールはありません。常識と自分の判断で判断するのが一番です。

19
user473816

更新/書き換え

いいえ、データベースへのアクセスだけに制限されているわけではありません。

MVCアプリケーションでは、通常、Mがドメインのモデルになります。これは、ビジネスロジックとデータをカプセル化できることを意味します。 貧血ドメインモデル は避けることをお勧めします。モデルを永続性を無視するように設定することもできます。私が何を意味するのかを理解するには、 邪悪なドメインモデルの作成 に関するこの講演をご覧ください。

ビューとコントローラーの側では、1対1のマッピングのように感じられる場合でも、常にビューモデルと呼ばれるものを使用することをお勧めします。遅かれ早かれ、モデルが実際には異なっており、単純なビューモデルをHTMLまたは他のレンダリング形式に直接変換するよりもビューに責任を与えたくないことがわかります。

コントローラのジョブは、モデルで動作を実行し、ビューのビューモデルを作成することです。

8
Daniel Little

モデルをデータベースだけに関連付けないでください。現在使用しているデータのメモリ内表現と考えてください(現在使用されていないデータの場合、DBにある可能性があり、そのデータにアクセスすると、最初にモデルに到達し、次にアプリケーションの他の部分に伝播されます。)。データ操作(モデルで行う)が完了したら、後で使用するためにデータベースに保存します。また、Modelは、DBからデータを取得するときに、DBからデータが入力される最初のクラスです。

2
Guruji

私にとって簡単な説明は次のとおりです。
表示これは、リクエストを作成してレスポンスを受信し、インターフェースを視覚化するエンティティです。
モデルこれは、ビューの要求を受信し、応答を返すエンティティです。
Controllerこれは、ビューとモデルの間に位置し、それらを調整するエンティティです。

したがって、システムからコントローラーを削除して表示すると、残っているのはモデルです。
つまり、モデルは単なるデータモデルやビジネスロジックモデルではありません。また、セキュリティ、検証、処理、フィルタリングなどの他の部分で構成されている場合もあります。

0
kayesh parvez