保存ボタン (ビュー) に、フィールドの現在の状態を含むオブジェクトをイベント (ビュー内のいくつかのロジック) と共に渡す必要がありますか?
はい、これは「ビュー内のロジック」ではありません。何も決定せず、アクションとその現在の状態を報告するだけです
コントローラーがビューへのアクセスを保持できるようにし、コントローラーにフィールドの内容を独自に把握させる必要がありますか (カップリングを追加)。
いいえ、これは非常に面倒です。イベントで VO を渡します
フォーム内のフィールドが変更され、コントローラが各フィールドの状態を追跡するたびにイベントを作成する必要がありますか (多数のイベント)。
はオプションですが、これは基本的に保存ボタンを押すのと同じです。トリガーは異なります (TextField.onChange) が、同じイベントをディスパッチできます (設定はフォーム = ビューで、一般的なイベントは VO ではなく VO でディスパッチされます)。各フィールドのイベント)
それとも彼らの別の方法ですか?
イベント付きの MVC フロー:
- onClick 保存ボタン: RecipeEvent.SAVE が (ビューから) ディスパッチされ、VO (値オブジェクト) に Recipe データ (RecipeVO など) が含まれます。
- コントローラーはこれをキャッチし、コントローラーはロジックが存在する場所であるため、それをどうするかを決定します: RecipesModel を更新します (モデルのメソッドを直接呼び出すか、RecipeModelEvent.SAVE などのカスタム イベントによって)。
- モデルはデータを保存し、RecipeEvent.UPDATE イベントを送出します (RecipeVO を使用)。
- それに応じてビューが更新されました(RecipeVO.IDが同じかどうかを確認し、タイトルなどのデータ表現を更新します…)
- オプションで、コントローラーはデータをバックエンド/リモートデータベースに保存できます
イベントリスナーに関しては、ビューはモデルをリッスンし、コントローラーはビューをリッスンします。
デカップリングについて: インターフェイスを使用します (IModel を使用すると、実際の実装ではなくインターフェイスに対してイベント リスナーを登録するため、別の実装でモデルを簡単に交換できます)。
明らかに、これにより多くのイベントリスナーが登録/削除され、適切なインスタンスに登録できるようにモデル/ビュー/コントローラーへの参照が保持されます。別の方法は、フレームワークを RobotLegs として使用することです。これにより、中央のイベントバスが利用可能になり、ビューのメディエーター クラスでイベント リスナーが簡単/自動でクリーンアップされます。