私は現在、3 層アーキテクチャを持つフロントエンド Web アプリケーションに取り組んでいます。
- クライアント層 (ブラウザー)
- アプリケーション層 (アプリケーションが存在する Java EE アプリケーション サーバー)
- バックエンド層 (メインフレームとレガシー アプリ、さまざまなデータベース)
階層化されたアーキテクチャがあり、アプリケーション層のレイヤーは次のとおりです。
- プレゼンテーション層: クライアント層で使用される UI を生成します。
- アプリケーション層: ユース ケースに相当し、アプリケーション ロジックを含みます
- サービス層: ドメイン ロジックとデータをバックエンド層から Java モデルにマップします。
- 統合レイヤー: バックエンド層と通信し、JMS、電子メール、...、DAO などのゲートウェイを含みます
これは単なるプロジェクト構造の例であり、最終的な結果はアプリケーションのタイプによって異なります。パッケージの分割と命名戦略に関するこの質問に対する私の回答で詳細を読むことができます。
必要に応じてレイヤーを追加/交換/削除できます。たとえば、SOA では、アプリケーション レイヤーまたはサービス レイヤーの上に Web サービス レイヤーをレイヤー化して、ESB (エンタープライズ サービス バス) がアプリケーションまたはサービスに接続できるようにすることができます。これらのいずれかが不可能または非常に難しいと思われる場合は、最適なアーキテクチャと設計がありません。
プロジェクトの構造を検討し、上記のようなシナリオを可能にするために、必要なモジュールとコンポーネントのいくつかの重要なプロパティは次のとおりです。
これは、低結合と高凝集性を考慮して設計することで実現できます。機能/抽象化のレベルによってモジュールをグループ化することによって階層化されたアーキテクチャを選択することは、良い出発点です。各レイヤー内で、機能別にさらにグループ化することも役立ちます。より具体的な各層がより一般的な層のインターフェースのみに依存するようにすると、結合も減少します。