1

まず、Web(このサイトを含む)で多くの調査を行い、モデルとコントローラーがMVCパターンでどのように通信するかについて多くの矛盾する情報を見つけました。これが私の特定の質問です(私はAS3を使用しています)が、それは一般的なMVCの質問です...

私には2つの主要なコンポーネントがあります...レシピのリストと選択したレシピを表示するフォームです。フォームには編集状態があり、レシピを編集してから変更を保存またはキャンセルできます。レシピに加えられた変更を処理するための(MVCの原則を使用した)最良の方法は何ですか?これまでのところ、保存ボタンで、コントローラーによってキャプチャされたイベントをトリガーしています。

保存ボタン(ビュー)に、フィールドの現在の状態とイベント(ビュー内のロジック)を含むオブジェクトを渡す必要がありますか?コントローラーがビューへのアクセスを保持し、コントローラーがフィールドに何があるかを独自に把握できるようにする必要がありますか(カップリングを追加)?フォームのフィールドが変更され、コントローラーが各フィールドの状態(多くのイベント)を追跡するたびにイベントを作成する必要がありますか?それとも彼らの別の方法ですか?注:保存ボタンがクリックされた場合にのみデータを保存したいので、フィールドをモデルにバインドしたくありません。

どんな助けでも大歓迎です。ありがとう!

4

3 に答える 3

0

これは本当にデータベースの問題だと思います。私がすることは、レシピが既に存在するかどうかを最初に確認するストアド プロシージャを作成することです。はいの場合は、更新します。そうでない場合は、新しいレシピを追加します。(エンティティをストアド プロシージャにバインドする必要があります。他の MVC フレームワークでこれを実行できます。actionscript については知りません)

それがオプションでない場合は、元のフォームをコントローラーのヘルパー クラスにキャッシュし、それをユーザーが保存しようとしているものと比較する必要があると思います。そして、コントローラーにレシピを更新するかどうかを決定させます。

最初の方法を使用する方がはるかにクリーンだと思いますが、アクションスクリプトを使用したことがないので...

于 2012-08-20T18:37:36.083 に答える
0

保存ボタン (ビュー) に、フィールドの現在の状態を含むオブジェクトをイベント (ビュー内のいくつかのロジック) と共に渡す必要がありますか?

はい、これは「ビュー内のロジック」ではありません。何も決定せず、アクションとその現在の状態を報告するだけです

コントローラーがビューへのアクセスを保持できるようにし、コントローラーにフィールドの内容を独自に把握させる必要がありますか (カップリングを追加)。

いいえ、これは非常に面倒です。イベントで VO を渡します

フォーム内のフィールドが変更され、コントローラが各フィールドの状態を追跡するたびにイベントを作成する必要がありますか (多数のイベント)。

はオプションですが、これは基本的に保存ボタンを押すのと同じです。トリガーは異なります (TextField.onChange) が、同じイベントをディスパッチできます (設定はフォーム = ビューで、一般的なイベントは VO ではなく VO でディスパッチされます)。各フィールドのイベント)

それとも彼らの別の方法ですか?

イベント付きの MVC フロー:

  1. onClick 保存ボタン: RecipeEvent.SAVE が (ビューから) ディスパッチされ、VO (値オブジェクト) に Recipe データ (RecipeVO など) が含まれます。
  2. コントローラーはこれをキャッチし、コントローラーはロジックが存在する場所であるため、それをどうするかを決定します: RecipesModel を更新します (モデルのメソッドを直接呼び出すか、RecipeModelEvent.SAVE などのカスタム イベントによって)。
  3. モデルはデータを保存し、RecipeEvent.UPDATE イベントを送出します (RecipeVO を使用)。
    • それに応じてビューが更新されました(RecipeVO.IDが同じかどうかを確認し、タイトルなどのデータ表現を更新します…)
    • オプションで、コントローラーはデータをバックエンド/リモートデータベースに保存できます

イベントリスナーに関しては、ビューはモデルをリッスンし、コントローラーはビューをリッスンします。

デカップリングについて: インターフェイスを使用します (IModel を使用すると、実際の実装ではなくインターフェイスに対してイベント リスナーを登録するため、別の実装でモデルを簡単に交換できます)。

明らかに、これにより多くのイベントリスナーが登録/削除され、適切なインスタンスに登録できるようにモデル/ビュー/コントローラーへの参照が保持されます。別の方法は、フレームワークを RobotLegs として使用することです。これにより、中央のイベントバスが利用可能になり、ビューのメディエーター クラスでイベント リスナーが簡単/自動でクリーンアップされます。

于 2012-08-20T19:41:51.283 に答える