最初の Java EE Spring プロジェクトの「ベスト プラクティス」は何ですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/8569

  •  08-06-2019
  •  | 
  •  

質問

私は現在、Spring フレームワークを使用した Java EE 開発に取り組もうとしています。私は Spring を初めて使用するため、適切に実行されているプロジェクトをどのように始めるべきかをイメージするのが困難です。

あなたがいずれかを持っている ベストプラクティス, 、ティップスまたはメジャー してはいけないこと 手始めに?大きなプロジェクトや小さなチュートリアルのようなアプリケーションなど、どのように Spring を使い始めましたか?すぐに使用したテクノロジー:AOP、複雑な Hibernate...

役に立ちましたか?

解決

ちょっとしたヒント - アプリケーションの懸念事項に基づいて Spring XML コンテキスト ファイルをモジュール化し、明確にラベルを付けると役立つことがわかりました。これは私が取り組んだ Web アプリの例です。

  • MyProject / src / main / resources / spring /
    • データソース.xml - 私の単一のデータ ソース Bean。
    • 永続性.xml - 私の DAO/リポジトリ。に応じて datasource.xml 豆。
    • services.xml - サービス層の実装。これらは通常、AOP を使用してトランザクション性を適用する Bean です。に応じて persistence.xml 豆。
    • コントローラー.xml - 私の Spring MVC コントローラー。に応じて services.xml 豆。
    • ビュー.xml - 私のビューの実装。

このリストは完璧でも網羅的でもありませんが、要点を説明できれば幸いです。最適な命名戦略と粒度を選択してください。

私の(限られた)経験では、このアプローチにより次のような利点が得られることがわかりました。

より明確なアーキテクチャ

明確に名前が付けられたコンテキストファイルは、プロジェクト構造に不慣れな人を、Beanの定義を探し始める合理的な場所を与えます。循環/不要な依存関係の検出が少し簡単になります。

ドメイン設計に役立ちます

Bean 定義を追加したいが、どのコンテキスト ファイルにもうまく適合しない場合は、新しい概念や懸念事項が浮上している可能性があります。例:

  • サービス層を AOP でトランザクション可能にしたいとします。これらの Bean 定義を追加しますか? services.xml, 、またはそれらを独自の transactionPolicy.xml?チームと話し合ってください。トランザクション ポリシーはプラグ可能である必要がありますか?
  • Acegi/Spring Security Bean を controllers.xml ファイルを作成するか、 security.xml コンテキストファイル?導入/環境ごとに異なるセキュリティ要件はありますか?

結合テスト

アプリケーションのサブセットを統合テスト用に接続できます (例:上記のファイルがある場合、データベースをテストするには、作成する必要があるのは次のとおりです。 datasource.xml そして persistence.xml 豆)。

具体的には、統合テスト クラスに次のようにアノテーションを付けることができます。

@ContextConfiguration(locations = { "/spring/datasource.xml" , "/spring/persistence.xml" })

Spring IDEのBeans Graphと連携して動作します。

焦点を絞った適切な名前のコンテキスト ファイルが多数あるため、Spring IDE を使用してアプリのレイヤーを視覚化するためのカスタム BeansConfigSet を簡単に作成できます。 ビーンズグラフ. 。私は以前、新しいチーム メンバーにアプリケーションの構成の概要を説明するためにこれを使用したことがあります。

他のヒント

まず春の中心部に焦点を当てます。依存関係の注入。DI の使用方法をすべて理解したら、AOP、リモーティング、JDBC テンプレートなどのより興味深い部分について考え始めます。したがって、私の最善のアドバイスは、Spring の使用を中心から拡張することです。

ベストプラクティス?標準の XML 構成を使用している場合は、個々のファイルのサイズを管理し、慎重にコメントしてください。自分や他の人は Bean 定義を完全に理解できると思うかもしれませんが、実際には、単純な古い Java コードに比べて、Bean 定義に戻るのはいくらか困難です。

幸運を!

まず第一に、Spring はモジュール性を重視しており、1 つのことを適切に実行する小さなコンポーネントを作成することに重点を置いた場合に最適に機能します。

一般的に次のようなベスト プラクティスに従っている場合:

  • 抽象クラスではなくインターフェイスを定義する
  • 型を不変にする
  • 単一クラスの依存関係をできるだけ少なくします。
  • 各クラスは 1 つのことをしっかりと行う必要があります。巨大なモノリシック クラスは最悪で、テストも使用も困難です。

コンポーネントが小さく、上記の定説に従っている場合は、簡単に接続して他のものと連携させることができるはずです。上記の点は、当然ながら Spring フレームワーク自体にも当てはまります。

PS

上記の点に耳を傾けないでください。彼らはどうすればよいかについて話しています。何かをする方法よりも考え方を学ぶことが重要です。人間は考えることができますが、何かを繰り返すのは賢明ではなく、考えるのは賢いのです。

実は春がとても好きでした。それは、平均的な J2EE Java Beans に新鮮な風を吹き込んだようなものでした。

Spring が提供するサンプルを実装することをお勧めします。

http://static.springframework.org/docs/Spring-MVC-step-by-step/

また、私はフルモンティを実行することに決め、Spring アプリケーションに Hibernate を追加しました ;)、Spring は Hibernate に対する優れたサポートを提供しているためです...:)

ただし、「してはいけないこと」があります。これは私が苦労して学んだものです (生産中の製品)。Controller インターフェイスのみを実装し、インターフェイスで提供されたデータを含む ModelAndView オブジェクトを返す場合、Spring はそれらのデータをキャッシュしようとして、それらのリソースをガーバッジ コレクションします。そのため、これらの ModelAndView オブジェクトに大きなデータを配置する場合は注意してください。ページが表示されるとすぐにサーバーが空中にある間、それらのオブジェクトはサーバーのメモリを占有することになるからです...

ここから始めてください。実際、これは私が読んだソフトウェア開発本の中で最高のものの 1 つだと思います。
Spring MVC と Web フローのエキスパート

MVC クラスの新しいアノテーションベースの構成について学習します。これは Spring 2.5 の一部です。アノテーションベースのクラスを使用すると、単体テストの作成が非常に簡単になります。XML の量を削減できるのも良い点です。

そうそう、単体テスト - Spring を使用している場合は、単体テストを行ったほうがよいでしょう。:) すべての Web クラスとサービス層クラスの単体テストを作成します。

ドメイン駆動設計について読んでください。Spring アプリケーションのすべてのレベルでドメイン オブジェクト クラスを使用できるということは、非常に強力なドメイン モデルを手に入れることができることを意味します。それを活用してください。

ただし、ドメイン オブジェクト クラスをフォーム入力に使用する場合は、Spring Framework に関する最近のセキュリティ上の懸念に注意する必要があります。 サーバーサイドに関するディスカッション コメントの穴を埋める方法を明らかにします。

始める良い方法は、「Springframework」に集中することです。Spring のポートフォリオは、エンタープライズ ソフトウェアのさまざまな側面に関するプロジェクトの大きな山に成長しました。最初は核心をしっかりと押さえて、概念を理解するように努めてください。 ダウンロード 最新のバイナリを入手し、コアに慣れたら Spring の petclinic の例をチェックしてください。SpringSource が提供するさまざまなプロジェクトの概要を非常によく示しています。

ドキュメントは非常に優れていますが、 本をお勧めします 核となる概念を理解した後。私がこのドキュメントに問題があると感じたのは、ドキュメントが詳しくなく、必要な詳細をすべて提供できないことです。

「...すぐに使用したテクノロジー:AOP、複雑な Hibernate...」 - 人々がすぐに使用しなかったものを尋ねる方が良い質問だと思います。あなたが引用した例をそのリストに追加したいと思います。

Spring MVC と JDBC テンプレートが最初の推奨事項です。それだけで非常に長い道のりを進むことができます。

私がお勧めするのは、Spring のアーキテクチャに関する推奨事項に忠実に従うことです。レイヤリングのアイデアを活用してください。Web レイヤーが他のレイヤーから完全に分離可能であることを確認してください。これを行うには、Web 層がサービス層を通じてのみバックエンドと対話できるようにします。

そのサービス層を再利用したい場合は、Spring の「コントラクトファースト」Web サービスを使用してサービス層を公開することをお勧めします。XML メッセージをやり取りすることから始めると、クライアントとサーバーを完全に分離できます。

Spring を最もサポートしている IDE は IntelliJ です。数ドルを費やす価値はあります。

Spring を使用するようになってから何年も経ちますが、私は Spring のファンとは言えませんが、App Fuse ツール (https://java.net/projects/appfuse/) は、作業を開始するために必要なすべてのアーティファクトを生成するという点で、人々のブートストラップを支援するのに役立ちました。

Spring は単体テスト、つまりクラスのテスト可能性にも重点を置いています。これは基本的に、モジュール化、関心事の分離、インターフェイスを介したクラスの参照などについて考えることを意味します。

少しだけ試して気に入るかどうかを確認したい場合は、Spring の JDBC や Hibernate サポートを使用して、DAO 層から始めることをお勧めします。これにより、多くの中核となる概念が明らかになりますが、アプリの残りの部分から簡単に分離できる方法で行います。これは私がたどったルートであり、Spring を使用した完全なアプリケーションの構築に入る前の良いウォームアップでした。

Spring 2.5 と 3.0 のリリースにより、現在活用すべき最も重要なベスト プラクティスの 1 つは Spring アノテーションだと思います。コントローラー、サービス、およびリポジトリーのアノテーションを使用すると、時間を大幅に節約でき、アプリのビジネス ロジックに集中できるようになり、すべてのオブジェクトをプレーン オールド Java オブジェクト (POJO) にすることができる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top