アプリにエンティティがほとんどない場合、サービスとモデル エンティティの 1:1 の比率は悪くないかもしれません。しかし、大きなアプリだとサービスが多すぎます。
サービスの数は、設計しているアプリのユース ケースによって異なります。分析フェーズでそれらを特定したら、機能に応じていくつかのグループにグループ化する必要があります。ユースケースの各グループはサービスになり、各ユースケースはそのサービスのメソッドになります。各サービスは、複数のモデル エンティティを管理できます (また、その機能を実行するために必要な DAO をサービスに注入する必要があります)。通常、サービスのユース ケースは、モデルのクラス図で相互に関連付けられたモデル エンティティを管理します。サービスは、「最大凝集力/最小結合」の優れた実践に従う場合があります。
DAO とモデル エンティティの比率は 1:1 です。各 DAO は、そのエンティティの CRUD 操作とクエリを実行します。メソッドが 2 つの関連エンティティをクエリする必要がある場合は、ビジネス コンセプトに応じて、より適切な DAO に配置します。
JSF プレゼンテーション レイヤーでは、ページとコントローラーの比率が 1:1 ではありません。これは、コントローラーが多すぎるためです。各サービスのユース ケースを実行するために必要なすべてのページを 1 つのコントローラーにグループ化します。したがって、コントローラーとサービスの比率は 1:1 であり、ページがユース ケースを実行するコントローラーに各サービスを挿入します。
もちろん、これらは一般原則です。アプリでそれらを壊した特定のケースがいくつかあるかもしれませんが、それらはほとんどありません.
サービスとコントローラーは多すぎないかもしれませんが、ロジックとフィールドが多すぎるため、少なすぎてもいけません。妥協をしなければなりません。