0

追加設定なしで、Entity Framework を使用して MVC でコントローラーを作成すると、コントローラーにデータをプルしてビューに表示する基本的な Get ステートメントが得られます。例えば:

    public ActionResult Index()
    {
        var capsules = db.capsules.ToList();
        return View(capsules);
    }

私が理解している方法では、MVC コードを記述する最良の方法は、モデル プロジェクト内にデータ固有のロジックを配置することです。次に、コントローラーは、ロジックが含まれているモデル クラスでそのメソッドを呼び出し、データを取得して、ビューに送信します。上記の例は、単純にカプセルのリストを取得するだけで、非常に基本的なものです。カプセルの取得操作を処理するための特別な「CapsuleModelContext」クラスは作成しませんでした。これは、edmx ファイルで処理されているためです。

これはすべて、コントローラーまたはモデルのコンテキスト クラスでインスタンス化された dbContext を使用する必要があるかどうかという問題に要約されると思います。追加設定なしで、dbContext は Controller 内でインスタンス化されます。ここでのベストプラクティスへのアドバイスはありますか?

4

1 に答える 1

5

ドメイン モデルビュー モデルを区別してください。ビュー モデルはデータの永続化を担当しません。ビュー モデルは、ビューとの間でやり取りされるエンティティのコンテナーとして存在します。簡単に言えば、これらはビューのモデルであり、ビューが操作するように設計された永続データではありません。

これを念頭に置いて、コントローラーを使用して、永続化されたデータを操作するために使用しているエンティティ (リポジトリであれ、より直接的にはデータベース コンテキストであれ) と対話する必要があります。ビューモデルは、このデータをビューからコントローラーに伝達するための媒体として使用されます。コントローラーは、フィールドを関連するビジネスエンティティにマップし、選択した永続化方法と対話します。ビュー モデルとビジネス エンティティ モデルは、お互いを認識しないようにする必要があります。

ビュー モデルに含める必要がある唯一のロジック (理想的には最小限に抑える必要があります) は、明らかにそのビュー モデル自体に固有のロジックです。

同様の質問に対する別の回答を投稿しました。これは、これが実際にどのように機能するかのスケルトンを示しています。

TextBoxFor() が検証マークアップを生成しない

于 2013-02-03T22:03:40.040 に答える