私が働いている場所では、Maven 2 を使用しており、私たちのプロジェクトには非常に優れたアーキタイプがあります。目標は、問題を適切に分離することでした。そのため、複数のモジュール (アプリケーションの「レイヤー」ごとに 1 つ) を使用してプロジェクト構造を定義しました。 - 共通: 他のレイヤーで使用される共通コード (i18n など) - エンティティ: ドメインエンティティ - リポジトリ: このモジュールには daos インターフェースと実装が含まれます - services-intf: サービスのインターフェース (UserService など) - services-impl: サービスの実装 (UserServiceImpl など) - web: に関するすべてWeb コンテンツ (例: css、jsps、jsf ページなど) - ws: Web サービス
各モジュールには独自の依存関係があり (たとえば、リポジトリは jpa を持つことができます)、一部はプロジェクト全体です (したがって、それらは共通モジュールに属します)。異なるプロジェクト モジュール間の依存関係により、物事が明確に分離されます (たとえば、Web レイヤーはサービス レイヤーに依存しますが、リポジトリ レイヤーについては認識しません)。
各モジュールには独自の基本パッケージがあります。たとえば、アプリケーション パッケージが「com.foo.bar」の場合、次のようになります。
com.foo.bar.common
com.foo.bar.entities
com.foo.bar.repositories
com.foo.bar.services
com.foo.bar.services.impl
...
各モジュールは、標準の Maven プロジェクト構造を尊重します。
src\
..main\java
...\resources
..test\java
...\resources
特定のレイヤーの単体テストは、\src\test の下にある場所を簡単に見つけることができます... ドメイン固有のものはすべてエンティティ モジュールに配置されます。実装が何であるかを正確に知る必要がないため、FileStorageStrategy のようなものを repositories モジュールに入れる必要があります。サービス層では、リポジトリ インターフェースしか知りません。特定の実装が何であるかは気にしません (関心の分離)。
このアプローチには複数の利点があります。
- 懸念事項の明確な分離
- 各モジュールは jar (または web モジュールの場合は war) としてパッケージ化できるため、コードの再利用が容易になります (たとえば、モジュールを maven リポジトリにインストールして、別のプロジェクトで再利用できます)。
- プロジェクトの各部分の最大の独立性
これがすべての質問に答えるわけではないことは承知していますが、これにより正しい道を歩むことができ、他の人にとって役立つことが証明される可能性があると思います.