4

jee6バックエンド(jsonベースのAPIのみ)と多くのクライアントサイドコードを備えたアプリを実行しています。シングルページアプリケーションのように見えます(最近のこのクールな流行語)。

コードベースを構造化する方法がわかりません。私が考える方法があります

  • バックエンドとフロントエンドに別々のプロジェクトがあります-これは、バックエンド部分が純粋なJavaであり、Mavenやその他すべてのものがあり、すべてのjs固有のビルドツールなどが別々のフロントエンドにあることを意味します。
  • すべてを1つのプロジェクトにまとめて、1つのアーカイブ(war)を取得して、すべてのフロントエンドのものを内部に配置してサーバーにデプロイできるようにします。私はそのアプローチが本当に好きではありません...

最初のものを使用する場合の展開はどうですか?このフロントエンド部分から別の「戦争」アーカイブを作成してサーバーにドロップする必要がありますか?

人々が使っている習慣は見つかりませんでした。

4

1 に答える 1

4

JavascriptとCSSパッケージをWARに残し、Wro4Jのようなものを使用します(私はある時点で共有できる独自のアセットパイプラインコードを持っています)。

理由は次のとおりです。

  1. 開発を容易にするために、サーブレットコンテナの実行中にJavascript/CSSを編集するときに更新する必要があります。Maven、Eclipse(および/またはJRebel)リソースリフレッシャーは、奇妙なパッケージ管理では機能しません。
  2. Javascript/CSSのみの縮小化のためのWAR/JARのようなものは実際にはありません(Require.jsJAMは依存関係の読み込み用です)。

別々のプロジェクト/jarに別々のJavaコードがある理由は、結合を回避し、再利用を改善し、凝集度を高めるためです。分離のためにあなたがしようとしていることは、主に結束のためです。ほとんどの場合、JavascriptをWebアプリから分離する必要はありません。これは、JavascriptがすでにJavaから非常に分離されており、言語/ランタイムが完全に異なるためです。

ただし、JS / CSSをCDNしたいと言っているかどうか、およびコードを分離する方が実験しやすい理由は理解できます。

2つのオプションがあります。

  1. Gitのサブモジュールであり、WARプロジェクトのサブモジュールである別個のプロジェクトとしてJavascriptとCSSがあります。
  2. 2つのWARプロジェクトがあります。1つはバックエンドJavaコードを使用し、もう1つはフロントエンドコードを使用します。複数のWARSをサポートするコンテナが必要であり、恐ろしいサーブレットコンテナコンテキストパスの管理について心配する必要があります。

私は以前働いていた会社で実際に2番目のことをしました(それを笑ってください)。それはかなりうまくいきました。しかし、今日、私はその迅速さと容易さのために#1を好みます(それを笑ってください)。

于 2012-12-16T00:25:53.507 に答える