2009-04-07 13 views
0

特定のソフトウェアシステムの全体的な構造は、モデルビューコントローラです。 ビュー(グラフィカルインターフェイス)は、モデル(ドメインオブジェクトモデル)の表現です。モデルビューの同期(または同期の回避)

ただし、ビュー(グラフィカルインターフェイス)にはコンポーネント(JTextComponentなど)があります。これらのコンポーネントもModel View Controllerに配置されています。 JTextComponentはDocumentをモデルとして使用します。

JTextComponentは、ドメインオブジェクトモデルの特定の部分を表すためのものです。しかし、そのモデルは実際にはDocumentオブジェクトです。

この1つの情報は、JTextComponentによって描画され、JTextComponent Documentとドメインオブジェクトモデルの両方に格納されます。この組織は、モデルのこの情報を複製します。したがって、2つのモデルを同期させておく必要があります。 DRYの違反。

ドメインオブジェクトモデルの一部にJTextComponent(または任意のグラフィカルコンポーネント)をバインドするための洗練されたソリューションがあるので、本当にデータの1つの場所がありますか?

答えて

1

ここではいくつかのことが起こっています。

Javaフレームワークは、あなたのUIを更新する優れた方法を提供していますが、特定の構造体Documentを使用するように制限しています。

一方、データを表す適切なモデルがあります。モデルでDocumentを直接使用することで、モデルを特定のフレームワークに結びつけるリスクもあります。それは良い考えではありません。

Java Documentフレームワークでは、モデルとドキュメントの間にAdapter classを作成するためにこれを利用できる変更を聴くことができます。基本的には、フォームをセットアップするときにアダプタクラスのインスタンスを作成します。あなたはあなたのモデルで初期化します。アダプターには、文書を返すプロパティがあります。さらに、アダプタは、そのドキュメントモデルのリスナとして自身を登録します。アダプターは、ドキュメントモデルへのチャンスをモデルに変換する方法を知るのに十分なほどスマートになります。

はUIが JTextDocumentと一緒に作成され、この

  1. のようなものです。
  2. 作成プロセスでは、ビューからモデル を要求します。
  3. モデルの初期化時にアダプタ のインスタンスを作成します。
  4. また、アダプタは、ドキュメントのリスナーである として自身を設定します。
  5. JTextDocumentオブジェクトにドキュメントを割り当てます。
  6. ドキュメントとの相互作用は、アダプタが戻って変換されたデータを渡すビュー を通知
  7. をアダプタに バックが報告されています。
  8. ビューでモデルが変更されます。
  9. ビューは、 モデルが変更されていることをアダプタに通知しません。
  10. アダプターは、変更内容 を文書の変更に変換します。

アダプタはJavaフレームワークに関連付けられているため、取得できるUIの近くにプッシュする必要があります。ビューは、使用しているフレームワークに固有のものを参照する必要がないように、アダプタがビューによって公開されるインタフェースを実装する可能性があります。フレームワークを変更するときには、そのインタフェースを実装する新しいオブジェクトを作成するだけで済みます。ビューは賢明ではありません。

2

Documentオブジェクトを自分のオブジェクトモデルで作成します。

次に、setDocument(d) methodを使用してください。

+0

または、ドキュメントを取得するコンストラクタ。 –

1

私が正しく理解するならば、あなたは平行した封じ込めの階層に直面しています。

enter code here 
        view -----------------------> Model 
        | 
        v 
       TextArea------------------------>Document 

あなたの懸念は、モデルのデータがドキュメントにも存在する必要があることです。これに対処する最もエレガントな方法は、ドキュメントをモデル自体から外すことです。つまり、ドキュメント全体をモデルにすることです。

私はYuvalが同じことを示唆していると思います。

関連する問題