プロが教えるわが家の防犯対策術!

お世話になります。
データベースで結果を取得する場合など、連想配列のままではなく何故、わざわざオブジェクトに格納する様な手法が使われるのでしょうか?

連想配列のままで処理するほうが早いと思いますし、それに付随するクラスファイルも多くなります。また、「結びつきを緩くして仕様変更に耐えうる様に」など聞きますが、余計複雑になってしまう様な気がしますので、メリットが今ひとつ分からず判断に迷ってしまいます。

どの様な使い分け、考え方をすれば良いかアドバイスいただけたら幸いです。
何卒、宜しくお願いします。

例)
※必要と思われる部分のみ記述しております。

■連想配列
while($row=mysql_fetch_assoc($res)){
~以下必要な処理}

■オブジェクト配列
while($row=mysql_fetch_assoc($res)){
$example = new Example();
$example->setName($row['name']);
$example->setAddr($row['addr']);
$array[] = $example
}
~以下必要な処理

○モデル
class Example
{
private $_name = null;
private $_addr = null;
public function __construct() {}
public function setName($name)
{
$this->_name = (string) $name;
return $this;
}
public function getName()
{
return $this->_name;
}
public function setAddr($addr)
{
$this->_addr = (string) $addr;
}
~以下省略
}

A 回答 (1件)

こういう処理をO/Rマッピングと言いませんか?


O/Rマッピングにはメリット・デメリットがあります。
メリットはざっくり言えば変換後はオブジェクト指向の世界のことだけを考えればよくなるということです。データの取得、設定はsetter / getterで行えますし、一連のデータの受け渡しもオブジェクトの受け渡しとして描かれます。
デメリットはメモリーが無駄に使われて、性能が出ないということに尽きるでしょうね。O/Rマッピングの段階で抽象化されてしまい、RDBのことを綺麗サッパリ忘れるので、RDBだとインデックスを使って高速にデータを選択できるところがそれを使わないために遅くなったり、無駄なメモリーを使ったりすることになります。O/RマッパーによってはSQLを直書きできるオプションを用意しているものもありますが、あまり筋がいいとは思えません。
あと、PHPだと簡単に連想配列を作れるので、わざわざオブジェクトを作ってもあまり嬉しくないかもしれません。JavaだとHashMapなどで連想配列を作るのにもそれなりのコストが掛かりますし、オブジェクトにしたほうが型のチェックもしてくれますのでオブジェクトにする利点はPHPに比べてはるかに大きいとは思いますが。

O/Rマッピングで検索すると賛否両論見つかると思うので、まぁ、見てみてください。個人的にはRDBを裏で使うなら、強く型づけされた言語でもあるまいし、連想配列の配列で良くない?と思ってしまいますが...
    • good
    • 0
この回答へのお礼

hanabutako様
早々のご回答有難う御座います。

> O/Rマッピングと言いませんか?
すみません、出題に入れた方が適切でしたでしょうか。。

なるほど、言語の仕様によるのですね。
何か、何でも「オブジェクト指向で・・・」ってするのが望ましい的な強迫観念?を抱いてしまい、気がつけば、オブジェクト指向、非オブジェクト指向ごちゃごちゃのPGになってしまって悲しい限りです(恥)

>O/Rマッピングで検索すると
有難う御座います。
はい、沢山出てきますね、、ActiveRecordとかデータマッパーとか・・・
色々ありすぎて訳分からなくなってしまいそうです。。

でも、hanabutako様に「連想配列の配列で良くない?」と言われますと、背中を押して下さった様な気がしますので、踏ん切りがつきました。
変に気張らずに「連想配列」を使用したいと思います。

有難う御座いました。
今後とも宜しくお願いします。

お礼日時:2012/11/30 13:35

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