関連したデータを扱う複数のGUIコンポーネントを疎結合に実装する
こんなGUIアプリ作ってみました
裏側の設計はこんな感じです。
今回作成したGUIコンポーネント(テーブルとキャンバス)は点オブジェクトを管理するという役割を共有しているのでキャンバスへの入力によってテーブルは更新されなくてはならず、また逆も同様です。
ただ、コンポーネント同士が依存性を抱えた作りにしてしまうと、例えば他に点オブジェクトに関連したGUIコンポーネントを追加する際に影響範囲が爆発的に広がっていってしまいます。
そこで今回は仲介者(Broker)を介することで、コンポーネント間の依存性を完全に排除するような構成にしました。
- 各コンポーネントは仲介者に「データが渡されたら渡されたデータについて教えてくれ」とコネを取る
- 各コンポーネントは入力があったとき、入力データを仲介者へ渡す
- 仲介者は1の手順でコネがあったコンポーネント全てに渡されたデータを共有する
- 各コンポーネントは受け取ったデータをもとに適切に画面を更新する。
…
まあ、ただのPub/Subメッセージングモデルですね。
GUIフレームワークはJavaFx、Pub/Sub周りの実装はRxJavaのPublishProcessorを利用しました。
すみませんが、ファイル数がいつもより多いので今回はソースコードの公開は控えさせていただきます。