1

これが私が持っているDBの構造例です:

ここに画像の説明を入力してください

学生ビューフォームに、ファイルを追加するためのフォームを追加しました。

Student Controllerでは、エントリを作成または更新するときに、ファイルのアップロードとファイルデータベースエントリの作成を管理します。

私が知りたいのは、MVCデザインパターンで、これを行う正しい方法は何ですか?私のStudentコントローラーは、ファイルモデルの実行方法を認識し、ファイルを追加する方法を知っている必要がありますか?

または、これを行うための最良の方法は、Studentコントローラーで、ファイルコントローラーの追加または更新アクションを呼び出すことです。しかし、そのように、私はMVCを壊していますか?

ありがとう!

4

1 に答える 1

0

MVCを破る方法:

  • コントローラーがアプリケーションロジックを担当し、永続性さえも持つ可能性があります(モデルレイヤーとビューの状態を変更するだけである必要があります)
  • モデルは単一のクラスではなく、異なる責任を持つ異なるクラスで構成されたレイヤーです(「ファイルモデル」または「学生モデル」はありません)

最良のシナリオでは、コントローラーはデータからのフィードバックを持たず、モデルレイヤーに渡されます(できれば、ドメインモデルレイヤーを使用してアプリケーションロジックを処理するサービスを介して)。

代わりに、ビューインスタンスは、ユーザーの応答のアセンブルを開始するときに、モデルの状態を(サービスを介して)チェックし、何かが変更されているかどうかを確認します。アップロードの場合、これは、ビューがアップロードの結果を検出し、データに基づいて応答方法を決定するポイントになります。通常、ファイルアップロードの場合、応答にはHTTPロケーションヘッダーのみが含まれます。

プロファイル履歴に基づいて、WebのコンテキストでMVCについて話していると想定しています。従来のMVCでは、ビューは、そこで使用されるオブザーバーパターンのために、モデルレイヤーの変更を明示的にチェックせずに認識していました。

ほとんどの場合、「アップロードコントローラ」がありますが、ドメインオブジェクトやストレージの抽象化と直接対話することはできません。代わりに、ユーザーの要求を受け取り、そこからデータを抽出して、必要な場所に渡します。

Webアプリケーションでは、「ユーザー」はWebブラウザーであり、それを操作する人ではないことに注意してください。

于 2013-01-15T20:52:58.517 に答える