2017-04-12 16 views
0

私は、1つまたは複数の計測器を制御し、そのデバイスのデータを可視化して保存し、ユーザーが何らかの制御データを入力できるようにするPCで実行されるプロジェクトにPRISMライブラリを使用する予定です。デバイスには、さまざまなデジタルセンサーとアナログセンサーとアクターがあります。彼らは異なるタイプと知性を持つことができます。ほとんどの場合、彼らには「真の」インテリジェンスがなく、すべてのコントロールロジックがPCにあります。 この「インテリジェンス」は、デバイスから常にデータを読み取る必要があります。通信は、COMポート、TCP/IPソケット、WebインターフェイスへのHTTPなどさまざまな種類があります。PRISM外部デバイスを制御する

「インテリジェントロジック」のための最良の解決策は何か分かりません。デバイスとの継続的な通信が必要なため、すべてのUIタスクから分離する必要があります。より高いプロセスロジックを構築するためには、バックグラウンドワーカーやスレッドに何らかの種類のステートマシンが必要です。

質問:それは、そのバックグラウンドワーカーへの参照を持つサービスとしてPRISMに登録されたデバイスごとのインスタンスですか?または、そのバックグラウンドワーカーを作成して、表示および編集するデータを処理するために設定された各機器に必要なViewModelにリンクする必要がありますか?または、別の最良のソリューションがありますか?

私は(私は唯一のTCPソケットを持っていた他のMVVMフレームワークと似た何かをやったし、私の解決策は、単一のリスナーに基づいた

...これは、特定のPRISMの1以上の一般的なアーキテクチャの質問をSIと思う

答えて

0

機器との同盟)をサービスとして登録する。アプリケーションでは、複数のキューを持つことも、複数のプロデューサを持つ単一のキューを持つこともできます。

デバイスからのすべてのメッセージが同時キューに挿入され、各ビューモデル(各デバイスに1つ)がそのキューから読み込まれました。

ViewModelからデバイスへの通信は、「出力」キューを介さずに直接行われました。

アプリケーション全体がawait/asyncパターン上にビルドされ、UIと通信が切り離されていました。私はservalデバイスから複数のコマンドと通知を、問題なく同時に送受信できました。

しかし、これもやはり幅広い質問です。私は広範な答えがたくさんあります。どのようにしてdvicesとやり取りしなければならないかということです。私のソリューションは、複雑さと柔軟性のバランスを保ちますが、他の多くのアーキテクチャも利用可能です。

+0

あなたの答えのためのthx、Antonello。私はWindowsサービスをインストールしないことを好み、PRISMの共有サービスについてもっと考えました。しかし、はい、質問はかなり一般的なアーキテクチャと見なすことができます – infero

+0

私が提案したパターンは、PRISMの共有通信サービスでも使用でき、バックグラウンドワーカーで実装するだけです。私は、コミュニケーションの問題が発生したときにそれをデバッグするのが簡単であるため、この単一のリスナー・アーキテクチャーを好んでいます。 –

関連する問題