>>461
DAO は、モデルクラスからデータベースアクセスを分離するもの。

たとえばドメインモデルクラスUserがあるとする。
おそらくいくつかのプロパティをもっているだろうが、とりあえず置いておく。

User オブジェクトをuserIdから見つけたり、新規に insert したりする必要がある。
これはモデルクラスが担当する(ex.1)か、モデルクラスのライフサイクルクラスが担当する(ex.2)。

ex.1
class User {
 static User find(String userId);
 static void insert(User user);
}

ex.2
class UserRepository {
User find(String userId);
void insert(User user);
}


さて、ユーザーの情報は時と場合によって様々なストレージから取得することになる。
DBMSを用意できていないプロジェクト初期にはフラットファイルやXMLファイルかもしれない。
RDBを使うとしても、開発時と実行時でDBMSが異なるかもしれない。

「どこから取得するか」は、ドメインモデルには関係ない。
だから、DAOクラスにデータアクセスを集約することでモデルクラスの再利用性を高めるのです。