2

MVCパターンの理解と実装に問題があります。

アプリケーションのすべてのデータを含み、Observableを拡張するシングルトンの「モデル」クラスがあります。これらのデータが変更されたときにビューを更新し、ビューの1つがユーザーからの入力を受け取ったときに、モデルを更新したいと思います。その間に、ビューとモデルの両方のインスタンスを持つコントローラー(オブザーバーを実装)があります。

これを行うには、ビューにコントローラーのインスタンスが必要だと思います。ボタンまたは任意のコンポーネントからイベントを受信するたびに、正しいコントローラーのメソッドを呼び出し、モデルに情報を送信します。モデルが更新され、オブザーバーに通知されます。オブザーバーは、変更された特定のデータにリンクされていない場合でも、すべてのビューのすべてのコンポーネントを更新します。これは、コントローラーがモデルで何が変更されたかを認識できないためです。これが良いデザインかどうかはわかりません。

この問題を修正しているように見えるPropertyChangeListenerクラスを少し調べましたが、すべてを理解しているとは言えません。これを行うための好ましい方法はありますか?

前もって感謝します !

4

1 に答える 1

2

あなたが提案していることにはいくつかの問題があります。

まず、MVCではなくMVVMについて説明します。

2番目の問題は、用語modelcontrollerがシングルトンを説明することを想定していないことです。これらは、ロジックを明確に定義された責任を持つクラスに編成することにより、関心の分離を支援するための単なる用語です。

MVC構造は次のとおりです。

モデル

これは、アプリケーションロジック/ビジネスルールです。これは基本的に、アプリケーションが電話帳に関するものである場合、電話帳APIの提供に関係するすべてのロジックとデータ構造がここに実装されることを意味します。

景色

このレイヤーは、データ構造やロジックを気にせず、単純な値を提示するだけであるという点で、モデルから完全に分離されています。文字列、整数、コレクション、名前を付けます。ただし、モデルのAPIは関係なく、コントローラーのAPIにのみ依存します。

コントローラー

これは物事が一緒になる場所です。コントローラーはメディエーターです。モデルの言語とビューの言語を話し、それらを連携させることができます。ユーザー要求はコントローラーにルーティングされます。たとえば、リクエストで電話帳のすべての番号を一覧表示したい場合があります。何が起こるか:

  1. コントローラがリクエストを受信します
  2. モデルのAPIを介して、電話帳に存在するすべての番号をモデルに要求します
  3. [オプション]データを、ビューが表示することを目的としたデータ構造に変換します
  4. データをビューに渡します

終了する前の最後のコメント:

コントローラがモデルからのデータを単純なものに変換しない場合、ビューはモデルと緊密に結合されていると言われています。ただし、必ずしもそうとは限りません。モデルのAPIが変更された場合でも、コントローラーは新しいAPIを古いAPIに適合させることができる可能性があります。これは、ビューがすでに理解しているものです。

于 2012-10-22T10:35:38.143 に答える