0

私は自分のデザインのこの特定の部分に行き詰まっており、どのようにアプローチすべきかについて意見を求めています。私のプログラムはコースLeerTrajectenと要素で構成されていますElementen。これらのオブジェクトはどちらも独立して存在できますが、要素をコースに追加することもできます。 それ自体は、、 などElementのオブジェクトの抽象スーパークラスです。DocumentCasus

(1) 要素がコースに追加されると、前の 2 つのフィールドとその他のデータ ( 、 ) で構成される固有のコード ( 、 ) を含むコース要素LeerTrajectenElementが作成されます。TrajectCodeElementCodeDisplayNaamDisplayOmschrijving

JTabbedPaneGUI (Spring) には、これらのコースと要素の管理専用のいくつかのタブ ( ) があります。すべてのタブには、概要と詳細パネルがあります。この概要では、JTableすべての既存のElementまたはを表示する がありますTraject

これは単に、プログラムをパースペクティブ ( ) に配置し、複数のタブが同時にアクティブでLeerTrajectElementある可能性があることを示すことを目的としています。JTable

(2) それぞれのオブジェクト ( LeerTrajectManagermanages LeerTrajectElementManagermanagesElementなど) を管理することを唯一の目的とするマネージャーもいます。これらのマネージャはDomeincontroller、ドメイン全体の一般的なファサードとして機能する に知られています。GUI からの要求はこれDomeinControllerに送信され、要求がマネージャー向けである場合は、正しいものに送信されます。

これが私のプログラムの基本的な概要です。視覚的な補助としていくつかの図を含めます。

(1) ここに画像の説明を入力

(2)ここに画像の説明を入力

プロジェクトの現在のセットアップに関する適切な情報を提供できたことを願っています。何らかの理由でモデルが正しく表示されませんDomeinControllerが、3 つのマネージャーが保持されています (概要には表示されませんが、関連付けは存在します)。

図 2 でわかるように、すべてのマネージャーは tableModel を保持しています。TableModel は次のように定義されます。

ここに画像の説明を入力

MyAbstractTableModel基本的な実装を拡張AbstractTableModelして提供するため、非常に基本的なニーズのみを提供しながら、特定の実装をこのクラスから派生させることができます。

ここが要点です。現在、すべてのマネージャーは独自の tableModel を保持しており、私たち (教師) はこれをマネージャーに抽象化する必要があると判断しました。私はこれの実装に取り​​組んできましたが、何か根本的な間違いを犯したように感じまし.特定のコースなどにリンクされたすべての要素が必要です。

このようなものを取得するために、2 つのgetTableModelメソッドを作成してみました。最初のものは引数として列挙型 { LEERTRAJECT, ELEMENT, LEERTRAJECTELEMENT} のみを取りましたが、2 番目のものは引数として追加のものを取りましたList<E>。これを行うと、適切なマネージャーによって以前に収集できたデータをリクエストに一般的に追加できます(したがって、結果セットデータのみをTableModelManager.

このアプローチは、my 内のすべてのメソッドに対して、メソッドで何が起こるべきか、どの tableModel を使用する必要があるかを判断するSwitchために、多くのステートメントを作成することになりました。TableModelManagerコードがかなり不潔になったので、これはおそらく私が望んでいた方法ではないだろうと考えました。

そもそもなぜマネージャーを導入する必要があるのか​​というと、どうやら私たちのテーブルモデルはそれぞれのマネージャーにハードリンクされているようで、これを避けるべきです。

結論として、私にはいくつかのマネージャーがいてTableModel、それぞれのデータを表示するために を保持しています。TableModel現在を保持することでこれを集中化し、TableModelManagerこのオブジェクトを介してテーブルモデルを生成したいと思います。他のマネージャは単に への参照を保持TableModelManagerし、データが変更されたことを伝えたり、適切なモデルを要求したりします。

これにどのようにアプローチすればよいですか?

PS: これは設計上の問題であると認識しているので、これを stackexchange ネットワークの別のサイトに配置する必要がある場合は、お知らせください。これを削除します。

PPS: 英語以外の部分については申し訳ありません。チームメイトは英語のみの使用を拒否しました。

4

1 に答える 1

1

詳細な分析がない場合、

  • enumここで説明するように、各要素に共通のインターフェイスを実装させて戦略パターンを実行させることで、アプローチを救うことができる場合があります

  • マネージャーを使用する具体的な例として、このTestTableは、のインスタンスを使用して、のMyObjectManager行ごとに1つのラジオボタンを管理しますJTable

于 2013-03-06T15:55:46.990 に答える