実行するビジネス ロジックがない場合、ビジネス レイヤーを強制する理由はありません。3 層アーキテクチャは難解なプロトコルではなく、ビジネス処理を想定して形成されたベスト プラクティスにすぎません。
現在のアプリケーションでは、ビジネス プロセスが関与していないときに、JSF コントローラから直接 DAO にアクセスすることがよくあります。このアイデアは、単純さが最も重要であるという考えを強調したJava チャンピオンによって与えられました 。
ビジネス ロジックの追加が必要になる可能性がある将来の変更が心配な場合。私はこの問題を次のように考えています。追加のビジネス ロジックは、データ アクセスを含め、とにかくビジネス レイヤーに追加されるため、ここでは違いはありません。
CRUD コードはたいてい非常に単純です。したがって、サービスの変更は、DAO から EJB への 1 回または 2 回の呼び出しを再ルーティングすることになります。これは単純なリファクタリングです。CRUD コード自体はそのまま残りますが、EJB にプッシュされます (別の簡単なリファクタリング)。
これは完璧ではありませんが、代替手段よりもIMOの方が優れています。つまり、空の間接レイヤーを使用します。これにより、何の役にも立たない複雑さが増します。ビジネス オブジェクトは、呼び出しを DAO に転送するだけです。
この場合に当てはまると思われる コードの匂いが 2 つあり ます。
ビジネス層の DA がコードの匂いだと言っているのではありません。私が言いたいのは、DAO をプロキシするだけのビジネス オブジェクトを持つことは臭いということです。複雑さについても同じです。独自の目的を果たさない追加のデータ構造/アーキテクチャ レイヤーです。アプリケーションには既に DAL が存在するようです。
考慮すべきもう 1 つの側面は、DAO を直接使用するサービスを開発者が目にするのはどれほど驚くべきことでしょうか? 5 つのサービスがあり、そのうちの 2 つが DAO に直接アクセスするのと、100 のサービスがあり、1 つのサービスのみが DAO に直接アクセスするのとは異なります。
最初のケースでは、コードの単純さが追加された概念の複雑さ (1 つのことに対して 2 つのコンセプト) を上回り、2 番目のケースでは、むしろビジネス層に固執したいと思います。別の方法では、一度だけでは大きすぎます。