3

JavaEEベースのRESTAPIアプリケーションがあります。次のような階層化アーキテクチャがあります。

  1. リソース(Jax-rsリソース)
    • オブジェクトの検証
    • オブジェクトマッパー
  2. サービスレイヤー
  3. リポジトリレイヤー
  4. JPAエンティティ

すべてがSpring依存性注入を使用して配線されています。

このコアアプリケーションは、他の外部開発者が拡張機能/プラグインを記述し、コアのマイナーまたはメジャー機能をオーバーライドまたは拡張できるように設計する必要があります。それが役立つのであれば、JavaEEのWordpressCMSのように考えてください。現在のアーキテクチャを中心にプラグインシステムをどのように設計しますか?

私が考えることができる明白な方法の1つは、適切なリソース(検証、objectmapperを使用)、サービス、リポジトリ、およびエンティティに新しい機能をオーバーライドまたは追加し、そこからjar+xmlを作成することです。ただし、プラグイン開発者は、コアコードのマッシュを再利用しながら、新しい機能を機能させるために最小限のコードを記述しなければならないことを確認したいと思います。

コアにまだ存在しないいくつかの追加フィールドを使用してブログ投稿を作成できるワードプレスのブログ投稿拡張機能を作成するとします。プラグイン/拡張機能の開発者にとって簡単な、現在のJava EEアプリの設計を行うための最も簡単でクリーンな方法は何でしょうか?戦略やテンプレートメソッドパターンのように役立つパターンはありますか?

Spring / JPAと標準テクノロジーを使用したモデルに従うオープンソースのJavaCMSはありますか?

4

1 に答える 1

1

コアをオーバーライドするのではなく、機能を拡張するつもりだと思います。典型的なアーキテクチャの例では、(コアから分離して) オーバーライドできる懸念事項を定義し、プロビジョニングを行います。Eclipse フレームワークは、プラグイン拡張機能と拡張ポイント メカニズムの組み合わせを使用してこれを実現します。これは、OSGI バンドルを使用してさらに進められます。

もう 1 つの方法は、アプリケーションをより小さな独立したモジュール/サービスに分割することです。ESB/アプリケーション インテグレーター (Mule/Spring Integration など) を介してこれらのモジュールをホストし、ユーザーがルーティング/変換のバージョンを構成できるようにするだけです。拡張とは、メッセージ フローに追加される新しいトランスフォーマーの作成を意味します。

于 2011-08-20T09:10:14.253 に答える