私の現在のアプリケーションの1つとして、Springの上に単純なプラグインベースのアーキテクチャを開発することに頭を悩ませてきました。 MVCのようなパターンを使ってどのくらい離れていても、カップリングが避けられないポイントに常に到達します。Springの上にプラグインベースのアーキテクチャを開発する
したがって、私は計量オプションを開始しました。最初はフィルターが良いと思いました。私が作るすべてのプラグインはフィルターになります。次にフィルター・マップに挿入します。もちろん、これはすべてのフィルタを列挙してチェックするときに少しオーバーヘッドを発生させますが、コントローラはデータに到達する前に何が起こったのか気にする必要はありません。モデルを(DAOやその他のものを通して)取り出し、それらを返す。
この問題は、私のアプリケーションリクエストのすべてがHTTPベースであるとは限りません。いくつかは電子メールに基づいており、他のものは内部的にスケジュールされているため、フィルタはあまり役に立ちません。
もう1つは、アノテーションベースのAOPで、プラグインが特定の規則に基づいてメソッドをインターセプトするすべてのメソッドに注釈を付けることでした。私の問題は、最初は私がAOPによく慣れていないこと、そして第二に、すべての慣習を書いて、すでに少しのカップリングを提案していることです。
私の考え方に最も訴えるオプションは、イベントに基づいています。私のアプリケーション(Webコントローラ、電子メールハンドラなど)内のリクエストハンドラのすべてのタイプは、すべての主要なアクションでSpringイベントをディスパッチするイベントディスパッチャのようなものになります。一方、プラグインは単に特定のイベントが発生したときにリスンして何らかのロジックを実行します。これにより、ポイント#1も利用できるようになります。そのようなプラグインの一部はフィルタでもある可能性があります。つまり、特定のコントローラアクションが完了したという通知を受け取ったときには、何もしないことを決定し、それらはフィルターチェーンによって呼び出されます。私はこれをやや良いアプローチと見ています。もちろん、ここでは、イベントをディスパッチするオーバーヘッドと、関連するすべてのクラスが永遠にSpringに結合されるという事実がありますが、これを必要な悪とみなしています。
Springイベントに関する私の主な関心事は、遅延、メモリフットプリントの両方のパフォーマンスです。
私はまだ専門家ではないので、ここでのフィードバックはすばらしい助けになるでしょう。この種のアーキテクチャーには春のイベントが最適ですか、私が見逃した別の解決策がありますか?すでにいくつかのサードパーティーのソリューションが存在する可能性があることを知っていますので、誰かが1つまたは2つの実証済みのものを指摘できれば嬉しいです。
ありがとうございました。
この質問には興味深いことですが、私はそれが完全にトピックではないと言いたいと思いますが、私は "Not Constructive"としてクローズすることに投票しています(定義を読んで、おそらく同意します)。私はSpringフォーラム/メーリングリストがこれについて話す場所だと思います。 –
私はこの質問がなぜ建設的でないのか、トピックから外れているのか分かりません。 –