2016-11-08 7 views
0

私は、デザインパターンやフォローアップの問題を解決するための良いアイデアを探しています。最初はいくつかの情報。私は約10〜15の植物をシミュレートするシミュレータを書いています。各プラントは異なっており、GUI上に表示したい別の情報を持っています。各プラントは独自のスレッドで動作します。私は植物の現在の状態、現在使用されている物質などの情報を表示したい。私のGUIは、すべてのプラントのタブが1つのタブコントロールのみで構成されています。今私の問題は、良い方法でデータを表示することです。ユーザーはプラントを制御したり、プラントを停止して開始したり、プラントで使用されている材料を編集したりできます。だから今私はGUIと私の植物のスレッド間でデータを交換するための良い方法を探しています。私はまだプログラミングに新しいですが、私はデータバインディング、MVC、MVVMのようなものがあることを知っている...しかし、実際には何も私の問題に適していません。それは少なくとも私の意見です。だから私は多分異なる意見を聞きたかったのです。Guiのデザインパターンの推奨

私はスレッド間でデータを交換するために次の考えを持っています。私はguiとプラントスレッドの両方が読み書きするすべてのプラントに対してモデルクラスを作成します。もちろん、すべてが同期されています。それから私は、表示したいデータが変更されたときにスローされるイベントを各プラントで作成します。しかし、ユーザーにGUIをアクセス可能に保つためには、GUIコントロールをタブコントロールで選択されているプラ​​ントのイベントにのみ動的に接続します。だから、タブが変わったら、GUIを選択したプラントに接続します。 1つのタブには1つのプラントしか表示されませ問題は、あなたがシミュレーションをスピードアップできるので、データが非常に速く変化することです。そのため、データを交換するにはスムーズで良い方法が必要です。プラントは独自のスレッドで実行され、モデル内のデータを読み取るため、GUIによってデータが変更されたときに通知する必要はありません。

私の考えはあなたの意見ですか?あなたはこれまで聞いたことがない最大のsh **をしようと計画していますか?もしあなたが私にいくつかのティップを与えることができれば素晴らしいだろう。このシミュレーターは私の学士論文の一部ですので、(科学的背景のために)使用できる良いパターンがあれば素晴らしいでしょう。私はパターンを探しましたが、私は私が満足しているパターンを見つけなかったと言いましたが、私は間違っているかもしれません。そして、私の悪い英語を残念に思っている!!!!私はWPFを使用しています。私はそれに言及することをほとんど忘れていた。

答えて

0

あなたがWPFを使用しているので、そしてあなたの説明に基づいて、MVVMは非常によく動作します:

  • モデル層が変更を公開するイベントを使用して、植物のスレッドで実行中のプラントモデルとシミュレータが含まれています(プラントごとに1つのモデルとスレッド)。
  • ビューモデルは、UIに表示するようにフォーマットされたモデルプロパティを公開します。変更のモデル(モデルスレッドに掲載)をリッスンし、UIスレッド(プラントごとに1つのビューモデル)にイベントを再パブリッシュします。
  • ビューは、選択したタブのビューモデルインスタンスにバインドし、UIにデータを表示します。
+0

ありがとうございました。私はまた、私の心の中でこのパターンを持っていました(それが最も適しています)。しかし私はこのパターンを私の植物クラスにどのように実装すべきか分かりません。私はそれを実装する方法を理解しているので、それはGUIに適しています。しかし、私は植物クラスからどのようにモデルにアクセスすべきですか? – Affenbaum

+0

GUIのようにビューモデルからモデルにアクセスする最善の方法はありますか、プラントクラスをモデルと直接連携させるべきですか。問題は、私が必要とする双方向通信です。何かが変わったときにGUIに通知する必要があります。また、プラントに通知する必要があります。モデルは私の工場の心臓部なので、私は何をすべきか分かりません。なぜなら、それがビューモデルからそれにアクセスする最善の方法かどうかわかりません。あなたがお勧めするものはありますか? – Affenbaum

+0

双方向通信は、通常、GUI側でデータバインディングを使用し、何かが変化したときにモデルからイベントを発生させることによって行われます。 MVVMのチュートリアルを探してください。詳細については、こちらをご覧ください。 – casablanca

関連する問題