0

MVC 3 と Entity Framework 4.1 でサイトを開発しています。私はEntity Frameworkを使用したMVC 3開発に慣れていないので、設計上の決定に役立つことを望んでいました。私のサイトには、ユーザーがアクセスできるページが約 15 ページしかありません。ページごとにコントローラーを用意するのではなく、コントローラー クラスを 1 つだけ用意することにしました (ただし、ページごとにモデルを用意します)。また、コントローラー クラスでは、各ページのメソッドをリージョンに保持して、簡単に拡張できるようにします。たとえば、RedirectToAction ホームページを持つ SiteController に LogOn メソッドを配置する予定でした。Hompage() メソッドは、HomePage 領域の SiteController に存在します。

私はすでに同僚から設計されたデータベースを持っています (DB には約 12 ほどのテーブルがあります) - Entity Framework がそこからコードを作成する方法を見てきました - ただし、このコードを DAL フォルダーに保持することをお勧めします。各ページに独自のモデルがまだありますか? たとえば、データベースに保存される FileName があります。ホームページでその FileName を表示したいので、ホームページ モデルに文字列 FileName を設定し、次に HomePage() ビュー メソッドで model.FileName を db.context(db からファイル名を取得) から設定することをお勧めします。

私のSiteControllerのインスタンス化ポイントですべてのdbコンテキストをインスタンス化するか、それらを必要とするメソッドでそれらをインスタンス化するのが最善でしょうか? つまり、ホームページ ビューでテーブル 1 とテーブル 2 が必要な場合は Hompage() メソッドでそれらを新しくし、別のビュー メソッドでテーブル 3/4 からのデータが必要な場合、またはテーブル 3/4 にデータを保存する必要がある場合は、そのメソッドの開始時にそれらを新しくしますか?

4

2 に答える 2

1

あなたが書いたときの最初の観察:

ページごとにコントローラーを用意するのではなく、コントローラー クラスを 1 つだけ用意することにしました。

私はそれに全く同意しません。複数の理由から。

次のトピックについて少し Google で検索してください。

  • SRP (Single Responsibility Principle) 別名 SoC (関心の分離)
  • IoC (制御の反転)
  • SPot (Single Point of Truth)
  • LSP (リスコフ置換原理)
  • OCP - 開閉原理
于 2012-12-13T09:01:44.847 に答える
1
  1. EF Power ツールを使用して、フォルダー構造を作成するデータベースをリバース エンジニアリングします。
  2. ページごとに 1 つのコントローラーを保持します。それらのページが、実際には同じプロセスの一部であるウィザード タイプのデータ入力シナリオの一部でない限り、複数のコントローラーに分けてください。
  3. 右クリックして新しいコントローラーを追加 - 組み込みのスキャフォールディングを使用して、エンティティ フレームワーク コンテキストを使用してコントローラーを生成します (上記の手順 1 の後にアプリケーションをビルドし、[コントローラーの追加] ダイアログでコンテキスト クラスを選択してください)。ビューとコントローラーが生成されます。データを入力する項目ごとにこれを繰り返します。
  4. コンテキストは、すでに作成されているコントローラーの一部としてインスタンス化されます。他に何もする必要はありません (dispose を含む - コントローラーが破棄されるため、生成されたコードもそれを破棄します)。
于 2012-12-13T16:00:58.327 に答える