it-swarm-ja.com

Webアプリケーション(Spring、JSF)フォーク、サブプロジェクトに既存のコードを再利用する方法は?

私の質問はやや哲学的で「建築志向」になるので、我慢してください。

現在、既存のJava WebアプリケーションがSpringとJSF(facelets)の上にmavenで構築されています。これらは基本的に、可能なソリューションの範囲を制限するツールです。

ここで要点を説明します。異なる「エンドコンシューマー」の異なるドメインで実行されるこのアプリケーションのフォークを実装し、両方のバージョンの変更要求を実装する必要がありますが、これらのバージョンのコードベースはおそらく常に約90%同じです。両方のバージョンで同時に実装するために同じ変更要求を定義できますが、選択したバージョンに対してのみ個別の変更要求が来る場合もあります。プロジェクトの後半でどのような変更要求が来るかを制御することはできません(ただし、かなりの数が予想されます)。機能の違いは、アプリケーションのBean部分とビュー部分の両方で発生する可能性があります。

変更を実装すると、2回実装することになる場合があるため、2つの完全に別個のプロジェクトを作成することは望ましくありません。大きな問題は、私たちが期待していることです将来的にはさらに多くのフォークそのため、努力はさらに増える可能性があります。

問題は、プロジェクトの保守性を向上させるために、どのような制御方法またはアーキテクチャパターンを導入できるかということです。 1つの解決策は次のようになります。

  • springプロファイルを使用して、アプリケーションの現在のフォークに基づいて適切なコンポーネントを挿入し、ビュー(xhtml)の実装を完全に分離します。

要約すると、特定のコンテキスト変数に基づいてのみ分離およびアクティブ化できるアプリケーション全体の変更を実装するための最良の方法を探しています(どこにでも伝播する方法は?)

任意の入力、アイデア、または新しい視点を歓迎します。

2
Jan Mathauser

あなたの問題は、単一の製品ではなく、 製品ライン をサポートする方法の1つです。幸いなことに、この問題を抱えているのはあなたが最初ではありません。この分野で働く人々の大規模なコミュニティがあり、産業関係者と学者の両方がいます。

お気に入りの検索エンジンで「ソフトウェア製品ライン」を検索すると、たくさんのサイト、本、その他のリソースが見つかります。

GoFに戻ると、さまざまなパターンがあり、制御された方法でバリエーションを設計にプラグインできます(戦略がすぐに思い浮かび、機能の交換可能な実装が可能になります)。ただし、多くの個別の変更が必要です。特定の顧客向けに、さまざまなバリエーションを組み合わせた製品の構成が必要です。そこで、製品ラインコミュニティからの考え方が生まれます(特にバリエーションポイントと製品構成)。あなたが言うように、これを実装するためにSpringプロファイルなどのテクノロジーを使用できますが、全能の混乱を避けるために、最初に達成しようとしていることの明確なモデルを持っている必要があります。

1
Eoin

以下を含むマルチテナント手法を検討する必要があります

  • 複数のクライアントを許可するようにdbを分割する、またはクライアントごとにdb
  • 切り替え可能なコンポーネントを使用してアプリを合成する
0
mcintyre321