機能要望 > その他 > EC-CUBE で O/R Mapper 的なもの |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
nanasess |
投稿日時: 2009/10/27 11:05
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2303 |
EC-CUBE で O/R Mapper 的なもの 大河内です.
通勤途中に閃いたので書いてみました. EC-CUBE で Java の JDO のような O/R マッパーが実現できないか... というアイディアです. あくまでも案なので, 本当に実現できるかどうか未定ですが, いかがでしょうか? 最近のトレンドな PHP のフレームワークをよく知らないので, もっと良いのがあるよとか, 教えていただけたらと思います. PHP4, 5 対応で, ここまでやってるのは見たことないので, 無いものは作ってしまえ的な発想です. あわよくば, EC-CUBE2.5 で実現できたらなぁと思います. みなさまのご意見をお聞かせください. 良さげな感じでしたら, チャレンジしてみたいと思います. ■ 概要 Java の JDO(Java Data Objects - JSR243) のような O/R Mapper を EC-CUBE で実現する. ■ サンプルコード(案) DB に INSERT するのはこんな感じ.
DB からデータを取得する場合
複数のレコードを取得する場合は, キーを配列で渡す. $clients には, dtb_client の連想配列が入る. 同じキーが複数存在した場合は, IN 句の SQL になる.
LIKE 検索は, 連想配列のキーに suffix をつける. suffix のルールによって, いろいろな検索条件の指定ができそう
■ 実装(案) - 各テーブルのメタデータは, Builder パターンを利用して, PersistenceManager に関連するメタデータ用のクラスで実装する - 各DBの差異も, 上記のメタデータ用クラスで吸収する. - SELECT とか, INSERT とかの処理は, PersistenceManager クラスが抽象化して行う. PEAR::DB とか, PDO に対するドライバを提供して, 差異を吸収する ■ 長所 - DB を意識しなくてよい - ソースコードがものすごくシンプルになる - 慣れればメンテしやすい - たぶん, EC-CUBE 以外でも使用可能 ■ 短所 - もしかしたら車輪の再発明? - 慣れるまで大変 - SQL をゴリゴリ書けない - PHP4 で, どこまで実現できるか不明 - PersistenceManager とか, Builder 用のクラスがものすごいことになりそう - あんまり速くない(たぶん) |
pineray |
投稿日時: 2009/10/27 11:42
対応状況: −−−
|
長老 登録日: 2006/9/9 居住地: 伊賀 投稿: 292 |
Re: EC-CUBE で O/R Mapper 的なもの とても良いアイデアだと思います。
不勉強なので JDO を良く分かっていないのですが、 MVCにおける Model にあたるものですよね。 現在、データベースにかかわる処理がいたるところに分散し、 またそれぞれでベタにSQLが記述されているという状況であり、 なんとかしなくちゃな、と思っていたところでした。 引用: - PersistenceManager とか, Builder 用のクラスがものすごいことになりそう 上記に関しては、すべてをひとつのクラスですませようとせず、 基本となるクラスを継承する形で、商品一覧用や商品詳細用といった 目的別のクラスを作成するようにしてはいかがでしょうか?
|
nanasess |
投稿日時: 2009/10/27 12:24
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2303 |
Re: EC-CUBE で O/R Mapper 的なもの 引用:
ありがとうございます! 正確には, Model の永続化を実現するための Dao(Data Access Objects) にあたります. 引用:
基本的に, PersistenceManager は抽象化した処理をするのみで, 各テーブルのカラム情報や, DB ごとの差異は, Model クラスや, PersistenceManager の内部処理をする別クラスに持たせてしまおうと思っています. 商品一覧なら, ProductLists モデル, 詳細なら Product モデルの内部にカラムの情報などをを格納してやって,
とやると, product_id = 1 の商品詳細が $product に格納されるイメージです. 下記のようにできた方がわかりやすくて良いかも.
ちょっと野心的すぎな気もしますが, 実現できたら, EC-CUBE 以外にもいろいろ広がりそうです. |
seasoft |
投稿日時: 2009/10/27 12:35
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7365 |
Re: EC-CUBE で O/R Mapper 的なもの Windows の ADO や RDO あたりに相当するものでしょうか?
だとしたら、嬉しいですね。特に INSERT / UPDATE は勝手が気に入っています。 PHP を使い始めた当初は、Windows の ADO っぽい (ただし非常にチープな) ライブラリを自作して使っていました。 > - あんまり速くない(たぶん) ここ、心配ですね。RAW な SQL を扱える既存のロジックと共存するなり出来れば、良いのかな。 ただ、それを容認すると、ロジックの書き方が分散してしまって、新たに EC-CUBE を使い始める方が覚えることが増えて大変かなぁという懸念もあるかも。
|
nanasess |
投稿日時: 2009/10/27 13:03
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2303 |
Re: EC-CUBE で O/R Mapper 的なもの 引用:
Windows の ADO や RDO をあまり知らないので恐縮なのですが, たぶんもっとオブジェクトの永続化を意識したものになると思います. 引用:
PHP がやる仕事は, あまり多くないはずなので, それほど気にしなくて良いかなぁ... とも思います. PDO とか, PEAR::MDB2 なんかを, PersistenceManager でラップするようなイメージなので, PDO とか MDB2 のボトルネックの方が大きいかも. まだ, 1行もコードを書いてないので想像ですけど^^; |
nanasess |
投稿日時: 2009/10/27 18:27
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2303 |
Re: EC-CUBE で O/R Mapper 的なもの
|
nanasess |
投稿日時: 2009/10/28 0:34
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2303 |
Re: EC-CUBE で O/R Mapper 的なもの 引用:
パフォーマンスの問題からは離れてしまうのですが... いろいろ考えてみたんですけど, カスタマイズでカラムを増やした時などは SQL を直書きできた方が一般の開発ユーザーに優しそうですね.
デフォルトでは, 完全に SQL を隠蔽してしまって問題ないと思うんですけど, PHP 初心者のことを考えると, 上記のように SQL を直書きできるようにしておいて, カスタマイズ時は置きかえてもらった方が, 直感的で扱いやすいのではないか? と思いました. |
seasoft |
投稿日時: 2009/10/28 11:19
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7365 |
Re: EC-CUBE で O/R Mapper 的なもの PersistenceManager::get***BySql 良い感じですね。
ちなみに、最終的に SC_Query あたりは、使わなくなる方向でしょうか?
|
ghana |
投稿日時: 2009/10/28 11:26
対応状況: −−−
|
新米 登録日: 2009/10/28 居住地: 投稿: 8 |
Re: EC-CUBE で O/R Mapper 的なもの ADOdb Active Record
http://phplens.com/lens/adodb/docs-active-record.htm とかどうでしょう? PHP4 と PHP5 両方対応しているようですが |
kishik |
投稿日時: 2009/10/28 11:31
対応状況: −−−
|
仙人 登録日: 2009/4/3 居住地: 東京 投稿: 382 |
Re: EC-CUBE で O/R Mapper 的なもの 横からですが。。
私個人的な意見としては、 初心者ならなおさらSQL直書きは敬遠されるかと。。 世の中のオブジェクト指向化がここまで進む中で、 EC-CUBEもその波に乗らないことには この先のユーザーを獲得するのは難しいと感じています。 上級者がSQL直書きをする糊しろがある設計だといいなあ と思います。 |
(1) 2 3 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |