重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Daoとは何でしょうか。また、必要性を教えてください。
よろしくお願い致します。

A 回答 (4件)

あ、書き忘れましたが、メリット、デメリットは1さんや2さんが書いてあること以外に挙げてみました。

    • good
    • 0

DAOの有用性はいろいろありますが主に


メリット
・型として宣言するため記述ミスが低減できる。
・使用変更があった際に変更が容易

SQL文を書く際に記述ミスがありますが、型として扱えば
IDEなどでコンパイルエラーとなるためすぐに気づきます。
また、もしDBの定義変更などした際に、DAOを変更してしまえば、
こちらもコンパイルエラーとなるために影響する箇所が即座にわかります。

デメリット
・宣言する必要があるため記述が多くなる。
・処理がかさむためやや処理が遅くなりがち(無視できるレベルでしょうが)

DAOのアクセッサーをいちいち作るのでコーディング量が増えます。
また、セッターやゲッターを使用することを義務つけるために処理が冗長になりやすくなります。
また、リストを扱う際に、いったんオブジェクトに格納しなければならないケースが発生して
メモリを大量に食ってしまう事になってしまうこともあります。
    • good
    • 1

Data Access Object



プログラムの中に直接SQL埋め込んでJDBCでアクセスしてもプログラムは作れますが
煩雑で大変です。

そこで、アプリで使うデータベース処理を定義し、入出力のインターフェースを定義して、
メソッドとして DAO に組み込むのです。

こうすると、アプリ側の処理とデータベース処理が分かれてアプリの
処理をわかりやすく書けます。

また、DAO を DI すれば、アプリもDAOも試験が大変やりやすくなります。

私は MyBatis で組むのが好きですね(^^;
    • good
    • 1

より良い設計のためのデザインパターンのうち、DAO はデータ保存に関する処理を分離するパターンです。


正式には Data Access Object というそうです。

データ保存とは、一般的にはデータベース製品への操作全般を意味します。
この操作方法は製品ごとに作法が違うし、なんらかのシステム改修の度に製品が変更される可能性があります。

そこでデータ保存の処理を業務自体から分離して結合度合いを低めることで、アプリケーションとデータベース製品を「疎結合」の状態にもっていけます。
また、データベース製品に精通した技術者が設計した DAO を経由して操作することにより、一般開発者が意識せずとも効率よく使える利点も有ります。

自分の経験で言うと、以下の様なケースで役立ちました。
* データベースは有償の製品を使っていたが、コスト削減の為にオープンソース製品に切り替えることが比較的容易だった
* DAO 経由以外の操作を禁止することにより、難解な SQL を書く開発者がおらず、アプリケーションの可読性や保守性が高まった
* あるデータベース特有の問題を回避するための修正が DAO の中で収まったので、業務処理に一切触れる必要が無くデグレートの危険性が少なかった
* 検索処理の高速化のために必要な修正範囲が DAO の中で収まったので、業務処理に一切触れる...
* データベース製品のバージョンアップに伴う対応が DAO の中で収まったので...

必要性ですが、
大規模な開発体制の場合ならほぼ必須。
小規模ならば、まあ趣味の範囲でしょう。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!