私の経験では (制限はありますが)、DAOクラスには、アプリケーションが実行できるすべての可能なデータベース操作が含まれる傾向があります。したがって、あなたの場合、getAllClients()やなどのメソッドがありますgetClientByName(String name)。
DAO 内のすべてのユーザーを取得し、必要なユーザーが見つかるまですべてのユーザーを反復処理すると、計算時間とメモリ消費が不必要に無駄になります。
データベースがヒットする回数を減らしたい場合は、キャッシング メカニズムを実装することもできます。ここに示すように、 HibernateなどのORMフレームワークは、必要なものを提供できるはずです。
編集:
コメントの質問によると、いいえ、サービスが冗長になることはありません。通常、Serviceレイヤーを使用して機能を公開しDAOます。これにより、基本的に、DAOアプリケーションのフロントエンドからは見えなくなります。通常、たとえば などの追加のメソッドも使用できますpublic String getUserFormatted(String userName)。これgetUserByNameにより、DAOが提供する機能が利用されますが、いくつかの追加機能が提供されます。
Service仕様に変更があり、アプリケーションとインターフェースするための Web サービスも必要になった場合、このレイヤーはそれ自体も有用になります。間にサービス レイヤーを配置すると、Web サービスはレイヤーDAOを介してクエリを実行できますService。
したがって、基本的に、サービスがDAOを公開せずに返されたデータを適応させている間、DAOレイヤーはデータベースのもの(CRUD操作)を心配します。DAO