web-dev-qa-db-ja.com

フロントエンドとバックエンドを分離する-Tomcat

私は現在、Java/Tomcat/SpringをWebアプリケーションのバックエンドに使用している会社と協力しています。フロントエンド開発者として、私はますます強く感じていますバックエンドは、いくつかの理由で、フロントエンドとは別のプロジェクトである必要があります。

1)プロジェクトのビルド-多くの最新プロジェクトは、うなり声やその他のフロントエンドツールを使用してビルドします。フロントエンドビルドの目標(連結、縮小、フロントエンドテスト、CSSの前処理)は、バックエンドの目標(コンパイルJavaコード、バックエンドテストの受け渡し、継続的インテグレーションサーバー)

2)Deployment:私がgitリポジトリにJavaScriptまたはHTMLファイルをコミットするとき、継続的なデプロイメントツールがプロジェクト全体を再ビルドして再デプロイする必要があることは意味がありませんが、それを伝える方法がありませんフロントエンドコミットとバックエンドコミットの違い。

それで、-プロジェクトをどのように再構成しますか以前は単一のgitリポジトリにある単一のwarファイルから自動的にデプロイされ、別々のバックエンドとフロントエンドを作成しましたか? Springフレームワークを使用している場合、これを実際に行うことはできますか?

現在、私のファイルは/webapp/WEB-INFディレクトリ(htmlページ/速度テンプレートの場合)と/webapp/resourcesディレクトリのほか(js、css、画像)の両方に存在しています。 Tomcatが/targetディレクトリに大量のファイルを展開するときに、これにどう対処すべきかについて少し混乱していますか?フロントエンドファイル用に個別のgitリポジトリを保持している場合、バックエンドプロジェクトを再デプロイすると完全に消去されませんか?

(もともと私は、Apacheの出身ですが、とても素晴らしくシンプルでした...)

JClarityでは、私たちは間違いなくこのアプローチに従いました。 「純粋な」HTML5フロントエンド-AngularJS、HTML、CSS、およびバックエンドとは別のプロジェクトであるJavascriptマイクロフレームワークのホスト-vert.xがあり、さまざまなバーティクルが別のJVM言語で適切にコーディングされています。

コツは、JUnit/TestNGスタイルの統合テスト(バックエンド)とJasmine/Seleniumテスト(フロントエンド)によってtestedの2つの間に明確に定義されたメッセージングAPIを置くことです。

それはうまくいきました本当に私たちにとってはよく、フロントエンドとバックエンドの間のメッセージングAPIにのみ依存しているという懸念を大幅に分離します。少し巧妙なMavenマジックを使用して、2つのテストとエンドツーエンドのテストの間の依存関係が正しいことを確認します。

これをすべて設定するための初期費用はかかりますが、この構造化されたアプローチを使用すると、新しい機能をどれだけ迅速に自信を持って追加できるかに驚かされます。さらに良いことに、サーバー側のコードには悪意のあるUI /ビューロジックがなく、その逆もありません。

要するに-私はそれを強くお勧めします:-)。

14
Martijn Verburg