6

Javaエコシステムに比較的慣れていない人にとって、QtやDjangoなどのフレームワークがシグナル/レシーバーシステムで行うことを行うかなり軽量な方法はありますか?かなり疎結合の方法で?

この質問が「単一の客観的回答」テストに失敗した場合は、事前にお詫び申し上げます。

編集:もう少しコンテキストを追加するために、これはWebサービスのデータベース駆動型アプリケーション層に関連しています。特定のリソースは、永続化される場合、追加のコンテキスト情報を含む監査レコードも保存する必要があります。Django では、シグナリング メカニズムを介してこれを行うか、それを行ういくつかの既存のライブラリのいずれかを使用します。Scala プログラムについては、コールバック関数を使用して独自のハッキーなものを作成しましたが、ファースト クラス関数を使用する方が簡単です。Swing などのフレームワークがこの種の機能を提供していることに疑いの余地はありませんが、(おそらく不当に) 現在かなりバニラなアプリケーションにそのような依存関係を追加することには懐疑的です (Django 自体がバニラの Python に大きく依存しています!)

4

4 に答える 4

4

Java では、少なくとも UI 側では、これは通常リスナー アプローチで行われます。特定のイベントが発生したときに呼び出されるリスナー メソッドを登録します。ただし、Qt シグナル/スロット メカニズムよりも少し疎結合ではない可能性があります...検討する可能性のあるもう 1 つのアプローチは、Javaメッセージ サービスです。これは、Java EE 標準に基づくクライアント/サーバー システムでの疎結合通信用に特に設計されています。 .

于 2012-09-21T20:04:48.583 に答える
4

Qt に似たシグナル/スロット メカニズムを提供する Java ライブラリを探している場合は、sig4jを参照してください。スレッドセーフ、タイプセーフであり、さまざまなタイプの接続をサポートします。

:私はこのライブラリの作成者です:)

于 2015-11-12T07:23:40.263 に答える
2

イベント駆動型プログラミングに関する他のコメント/回答に同意します。

http://eventbus.orgに興味があるかもしれません。これにより、すべてのイベント プロデューサーにリスナーを明示的に登録しなくても、イベントをグローバルにブロードキャスト/受信できます。

于 2012-09-21T21:26:45.003 に答える