Java Web プロジェクト構造のベスト プラクティス
-
20-08-2019 - |
質問
Hibernate と標準の MVC アーキテクチャを使用する新しい Java Web プロジェクトを開始しています。私はプロジェクト構造のレイアウトを開始したばかりで、これを行っている間、この領域に標準があるかどうか、コントローラーがどこに配置されるべきか、一般的にすべてをレイアウトする最適な方法について調べ始めました。しかし、実際にはガイドラインは見つかりませんでした。
それで私が知りたいのは
- Java Web プロジェクトのレイアウトに関するベスト プラクティス ガイドラインを知っている人はいますか?
- さまざまな種類のプロジェクトで常に従う特定の厳格なルールを持っている人はいますか?
- プレゼンテーション、ビジネス、アプリケーションなどの異なるレイヤーごとにパッケージを分割する傾向がありますか?
解決
私の以前の回答を続行するには、私は多くのWebプロジェクトを持っています。それらのすべてでsrc以下の構造は、多かれ少なかれ同じです。パッケージは、大きく3つの論理層に分離されている。
あなたが言ったように、まず、サーブレット、アプリリスナー、およびヘルパーのために、プレゼンテーション層です。
第二に、休止状態のモデル/ DBアクセス層のための層が存在します。ビジネスロジックのための第三層。しかし、時には、これらの層との境界は明確ではありません。あなたは、モデルが休止クラスによって定義されたDBアクセスのために休止状態を使用している場合ので、私は、DAOオブジェクトと同じ地域内にそれらを置きます。例えば。 com.sample.modelは、休止状態のデータオブジェクトを保持し、DAOオブジェクトを保持com.sample.model.daoます。
(通常は春に)直接JDBCを使用している場合、時々私は、データを配置することがより便利見つけるビジネスロジック層に近いのではなく、DBアクセス層を持つオブジェクトます。
(原料の残りの部分は通常、ビジネス層に該当)。
他のヒント
それは実際には Web フレームワークに依存します。
たとえば、ウィケットを使用する場合、JavaファイルとWebページは同じディレクトリに共存し、他のほとんどのフレームワークでは、ページ(.JSPファイルまたはプレゼンテーションエンジン)とCode-Behindのもの(Javaファイル)が完全に個別です。
したがって、フレームワーク (Spring MVC、Struts、JSF など) に付属するドキュメントを読んでください。
もう 1 つの良い提案は、Maven Archetypes を使用して特定のフレームワークのスケルトンを生成することです。一部の Web フレームワーク (Seam など) には、Web プロジェクトの基礎を築く独自のコード生成ツールさえあります。
SRCディレクトリについての私の唯一の良い提案(Yoniが言及していません)は、Type/Layerに従ってではなく、ビジネス目的に従ってパッケージを作成することです。
つまり、次のパッケージを意味します
- com.mycompany.myproject.customers
- com.mycompany.myproject.Departments
- com.mycompany.myproject.billing
- com.mycompany.myproject.reports
- com.mycompany.myproject.admin
そしてそうではありません
- com.mycompany.myproject.entities
- com.mycompany.myproject.tables
- com.mycompany.myproject.graphs
- com.mycompany.myproject.dialogs
- com.mycompany.myproject.servlets
2 番目の構造は汎用的すぎるため、無関係なものを含む巨大なパッケージを中心に解決される傾向があり、保守が困難です。
まず、Eclipse、Netbeans などの一般的な IDE の従来の構造に従うことです。たとえば、Eclipse では、すべてが WEB-INF フォルダーと META-INF フォルダーにすでに配置されているため、パッケージ化とデプロイメントが簡単です。クラスのソース コード (通常は src の下) は、自動的に WEB-INF/classes にコピーされます。他にも考慮すべき点がいくつかあります。
- MVC を使用している場合は、JSP に直接アクセスする必要がない可能性があります。その場合は、セキュリティ上の理由から、JSP ソース コードを WEB-INF/jsp の下に保持してください。
- 同様に、カスタム タグ ファイルを WEB-INF/tags の下に保持します。
- javascript ファイルは js フォルダーに、css ファイルは style フォルダーなどに保管します。実際の展開を模倣するには、すべてのフォルダーが WEB-INF と同じレベルにある必要があります。
- コードをレイヤーごとにパッケージに分割することをお勧めします。明らかに、Hibernate daos はサーブレットと同じパッケージである必要はありません。
- 同じパッケージ内にサーブレットが多すぎる場合は、機能に応じてサブパッケージ化することを検討してください。ただし、共通の祖先パッケージがあると便利です。これは読みやすさに役立ちます。
MavenのWebアプリケーション原型のレイアウトを使用してください。に
project
|-- pom.xml
`-- src
`-- main
|-- java
`-- webapp
|-- WEB-INF
| `-- web.xml
`-- index.jsp
私は、ここの例ではjava
フォルダを含めました、多分それは明らかだったが、それは何らかの理由で上記のリンクに取り残されました。