問題タブ [message-passing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - プラグインフレームワークでのメッセージパッシング
まず、私のブログでこの問題の背景を少し紹介します。
- http://www.codebork.com/coding/2008/06/25/message-passing-a-plug-framework.html
- http://www.codebork.com/coding/2008/07/31/message-passing-2.html
説明があまり明確ではないことを認識しているので、ここでできる限りのことを要約しようと思います。アプリケーションは、個人的な財政プログラムです。フレームワーク自体の詳細については、この投稿の最後にあります。
フレームワークが処理できるプラグインにはさまざまな種類があります(アカウント、エクスポート、レポートなど)。ただし、問題を引き起こしているのはこのクラスであるため、特定のクラスのプラグイン、いわゆるデータプラグインに焦点を当てています。アカウント用、トランザクション用など、1つのクラスのデータプラグインがあります。
私は大規模なリファクタリングの途中で、データプラグイン用の次のアーキテクチャを残しました。
- データプラグインオブジェクト(初期化、インストール、およびプラグインメタデータの実装)[実装
IDataPlugin<FactoryType>
] - データオブジェクト(アカウントなど)[実装、例
IAccount
] - データオブジェクトのインスタンスを作成するファクトリ[実装、例
IAccountFactory
]
以前は、データオブジェクトとプラグインオブジェクトが1つに統合されていましたが、これは、アカウントに記録されたトランザクションごとに新しいトランザクションプラグインをインスタンス化する必要があり、多くの問題を引き起こしていました。残念ながら、そのリファクタリングは私のメッセージパッシングを壊しました。データオブジェクトはを実装INotifyPropertyChanged
しているので、新しい問題が発生しました。回避方法がわかりません。プラグインオブジェクトはメッセージブローカーにイベントを登録していますが、実際に発生するのはデータオブジェクトです。イベント。これは、サブスクライブプラグインが現在、作成された各アカウント、トランザクションなどにサブスクライブする必要があることを意味します。 これは明らかにスケーラブルではありません。
私が現時点で知る限り、私には2つの可能な解決策があります。
- データプラグインオブジェクトをデータオブジェクトとメッセージブローカーの仲介役にし、場合によっては変更通知をバッチ処理します。これがなくてもできるはずだと私が感じているメッセージングシステムに別の複雑さの層を追加するので、私はこれが好きではありません。
- 現在のイベントベースの実装をジャンクし、より簡単に管理できる他の何かを使用します(メモリ内のWCF ?!)。
だから私は本当に尋ねていると思います:
- この問題をどのように解決しますか?
- 私が見落としている可能性のある解決策は何だと思いますか?
- 私のアプローチは漠然と軌道に乗っている/賢明ですか?!:-)
ブログ投稿の日付からわかるように、この問題のいくつかの変種は、かなり長い間私に負担をかけてきました!そのため、すべての回答をいただければ幸いです。
フレームワーク自体の背景は次のとおりです。
私のプラグインフレームワークは、プラグインブローカー、設定マネージャー、メッセージブローカーの3つの主要コンポーネントで構成されています。プラグインブローカーは、プラグインの発見と作成という、プラグインの基本的な作業を行います。プリファレンスマネージャーは、フレームワークと個々のプラグインのユーザープリファレンスを管理します。たとえば、有効になっているプラグイン、データを保存する場所などです。通信はパブリッシュ/サブスクライブを介して行われ、メッセージブローカーが中央に配置され、すべてが収集されます。パブリッシュされたメッセージタイプとサブスクリプションの管理。パブリッシュ/サブスクライブは現在、.NETインターフェイスを介して実装されています。このインターフェイスは;
INotifyPropertyChanged
と呼ばれる1つのイベントを提供します。PropertyChanged
メッセージブローカーは、実装しているすべてのプラグインのリストを作成しますINotifyPropertyChanged
このイベントで他のプラグインをサブスクライブします。メッセージパッシングの目的は、アカウントプラグインとトランザクションプラグインがストレージプラグインにデータが変更されたことを通知して、データを保存できるようにすることです。
oop - オブジェクト間のメッセージの受け渡し - 対象オブジェクトを参照するには?
オブジェクト指向環境における最も基本的なタスクは、オブジェクトに対してメソッドを実行することです。これを行うには、メソッドを呼び出すオブジェクトへの参照が必要です。この参照を確立して、オブジェクトをパラメーターとして呼び出し元オブジェクトのコンストラクター (または初期化メソッド) に渡す適切な方法はありますか?
object がobject foo
を呼び出す場合 bar
、(疑似コードで) 次のように言うのは正しいですか?
メッセージをやり取りする必要がある場合はどうなりますか? 対象オブジェクトを登録するメソッドが必要ですか?
これに対処するパターンはありますか?
scheme - このスキーム関数を別の形式に変換しますか?
したがって、合計をメッセージ パッシング オブジェクトとして定義する 1 つの方法を次に示します。
しかし、これは次のように書き換えることができます。
製品をメッセージ パッシング オブジェクトとして定義するために記述した関数を、上記の 2 番目の形式に変更するにはどうすればよいでしょうか? ここに私が書いたコードがあります:
c# - NSNotificationに相当するC#/。Net
私は、アプリケーションを.Netの世界に移植するObjective-C開発者です。私のObj-Cアプリケーションでは、NSNotificationオブジェクトを使用して、少数のオブジェクト間で非同期に通信します。.Netの世界で(より具体的には、C#言語を使用して)同様のことを行う方法はありますか?基本的なアプローチは、1つのオブジェクトが1つ以上のオブジェクトがリッスンする通知を投稿することです。
おそらくこれを行うための明白な方法がありますが、私はまだそれを見つけていません...
delphi - カスタムのファイル拡張子を持つファイルを開くことによってトリガーされたファイルのパスを見つけるにはどうすればよいですか?
プログラムを開くために使用したファイルの場所を取得するにはどうすればよいですか?
例: 新しい拡張子 ".xyz" を作成し、myapplication でファイル タイプ .xyz を開きたいことを Windows に伝えると、アプリケーションが開始されます。素晴らしいですが、私のアプリケーションは、アプリケーションを起動するために使用されたファイルのファイル パスのハンドルをどのように取得するのでしょうか?
また、アプリの 1 つのバージョンのみを実行し、新しいファイルを開いてアプリケーションのメソッドを呼び出すだけにする方法はありますか? たとえば、トレントを使用していて、5 つの .torrent ファイルを開くと、それらはすべて 1 つのアプリケーションに渡されます。
補足質問: すべてのファイル拡張子は 3 文字で、一般に使用されている拡張子のリストはありますか? ファイル拡張子を作成する場合、既に使用されているものは使用したくありません。
delphi - Delphi プログラムのあるインスタンスから別のインスタンスに文字列を送信するにはどうすればよいですか?
プログラムのあるインスタンスからプログラムの別のインスタンスに文字列を送信する最も簡単な方法は何ですか? 受信プログラムは、受信した文字列をパラメーターとして使用して、プロシージャを実行する必要があります。
DDE について読み始めましたが、混乱しました。他にどのようなオプションがあり、これを実装する最も簡単な方法は何ですか?
java - Java:クライアントとサーブレットの間でメッセージを渡す適切な方法は?
私のシステムは、クライアントからサーブレットにオブジェクトを正常に渡します。ただし、Java 1.1に対応するために構築されているため、原始的です。渡すメッセージオブジェクトは、int(約70種類の1つを表す)と、解析する必要のあるトークンの文字列(トークンには、リスト、オブジェクトのリストなどが含まれる場合があります)で構成されます。良くない!
したがって、これをJava1.5にリファクタリングすることを検討しています。intの代わりにenumを使用することは確かに改善ですが、残りのメッセージを送信する方法がわかりません。各タイプを表すために70の異なるクラスを作成することは、確かに正しい方法ではありません。
これをリファクタリングする方法についてのアドバイスはありますか?
rpc - メッセージパッシングに関するRPCの欠点は何ですか?
メッセージパッシングに関するRPCの欠点は何ですか?