私は自分のデザインのこの特定の部分に行き詰まっており、どのようにアプローチすべきかについて意見を求めています。私のプログラムはコースLeerTrajecten
と要素で構成されていますElementen
。これらのオブジェクトはどちらも独立して存在できますが、要素をコースに追加することもできます。
それ自体は、、 などElement
のオブジェクトの抽象スーパークラスです。Document
Casus
(1) 要素がコースに追加されると、前の 2 つのフィールドとその他のデータ ( 、 ) で構成される固有のコード ( 、 ) を含むコース要素LeerTrajectenElement
が作成されます。TrajectCode
ElementCode
DisplayNaam
DisplayOmschrijving
JTabbedPane
GUI (Spring) には、これらのコースと要素の管理専用のいくつかのタブ ( ) があります。すべてのタブには、概要と詳細パネルがあります。この概要では、JTable
すべての既存のElement
またはを表示する がありますTraject
。
これは単に、プログラムをパースペクティブ ( ) に配置し、複数のタブが同時にアクティブでLeerTrajectElement
ある可能性があることを示すことを目的としています。JTable
(2) それぞれのオブジェクト ( LeerTrajectManager
manages LeerTraject
、ElementManager
managesElement
など) を管理することを唯一の目的とするマネージャーもいます。これらのマネージャは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: 英語以外の部分については申し訳ありません。チームメイトは英語のみの使用を拒否しました。