質問するログイン新規登録
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

10442閲覧

DAOにはなぜインターフェースが必要なのか

kobe2018

総合スコア21

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

0クリップ

投稿2020/07/21 01:50

1

0

Dao(データアクセスオブジェクト)を取り入れた設計をはじめて試みているのですが、不明点があります。

Daoについて説明しているサイトがあります。
http://e-words.jp/w/DAO-2.html

以下引用
「DAOはプログラムからデータベースシステム(DBMS)などデータの永続化機構に対するデータの保存、読み出し、修正、削除などを行うための抽象的なインターフェースを提供し、データベース側の詳細な実装や利用方法の違いなどを隠蔽する。」

ここで質問です。
①なぜインターフェースを用いるのか。
最初からクラスではだめなのか。
②「実装や利用方法の違いを隠匿」とはどういうことなのか。
③データベースからデータを取得してそれを加工するプログラムを組みたい場合、
Daoに加工まで取り入れるのか、呼び出し側のmainメソッドで加工を行うのとどちらが望ましいか。

質問が多くて恐縮ですが、よろしくお願いします。

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

たぶん、2が理解できないので1もよくわかっていないのだと思います。

①なぜインターフェースを用いるのか。
②「実装や利用方法の違いを隠匿」

は、手段と目的です。

抽象的なインターフェースを提供し、データベース側の詳細な実装や利用方法の違いなどを隠蔽する。

目的:永続化するための詳細な実装や利用方法の違いなどを隠蔽する
手段:実装に依存しない抽象的なインターフェースを用意して利用させる

■詳細な実装や利用方法の違いなどを隠蔽する
永続化自体はデータベースでなくファイルの場合もあります(まぁデータベースもファイルですが)
javaでファイルに保存する場合、FileWriterなどを利用すると思います。
DB(RDB)の場合、JDBC経由で、SQLを実行しINSERT文を発行するような実装になります。
※もし永続化フレームワークなどを利用してSQLを書かないのであれば、まさに抽象的なインターフェースの恩恵を受けていることになります

これらの実装を利用者が意識しない方法を提供するために

DAO.save(保存オブジェクト)

のような、インターフェースを用意することで、DAOの利用者は保存先がDBなのかファイルなのか
知らずに保存できるようになります。

※DAOの実装者は、当然どう保存するか知らないと実装できません

③データベースからデータを取得してそれを加工するプログラムを組みたい場合、
Daoに加工まで取り入れるのか、呼び出し側のmainメソッドで加工を行うのとどちらが望ましいか。

加工の質によります。たとえば血液型がDBでは数値で、システム的には文字の場合
DAOで変換を行うこともあるかもしれません。
※表示/保存するタイミングで変換するかもしれません。

特殊な加工であれば、DAOでなく呼び出し側で行うことが多いと思います。
いわゆるビジネスロジックと呼ばれるものは低レイヤーには実装しない。

投稿2020/07/21 04:21

編集2020/07/21 04:24
momon-ga

総合スコア4828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kobe2018

2020/07/29 05:59

回答いただきありがとうございます。 永続化の仕組みを利用者が考えなくてもよいようにすることが目的だとわかりました。 これは永続化の仕組みが変更しても、他のプログラムに影響を与えないようにするため、という認識で合ってますでしょうか。(もしお時間があったら) Daoが少ししっくりきました。ありがとうございます。
momon-ga

2020/07/29 07:10

> 永続化の仕組みが変更しても、他のプログラムに影響を与えないようにするため はい。実装の詳細を知らずに済むということは、DAOの変更に利用者側のプログラムが影響されないようになります。 ※正確には、影響がないようなインターフェースを定義/設計する必要がある あとは、利用者側がSQLを知らなくてもRDBに格納できる実装が可能になるのもメリットの1つだと思います。
kobe2018

2020/08/01 13:43

丁寧に回答いただき、誠にありがとうございます!
guest

0

①なぜインターフェースを用いるのか。
最初からクラスではだめなのか。

ここでの「インターフェース」は、コード上のinterfaceではなく、もっと広い意味のものではないかと思います。文面も特にJavaに限ったものではないです。

②「実装や利用方法の違いを隠匿」とはどういうことなのか。

書いてのとおりなのですが、逆に何が疑問なのでしょうか?

投稿2020/07/21 02:14

maisumakun

総合スコア146785

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問