Changes between Version 2 and Version 3 of Ticket #555
- Timestamp:
- 2009/12/01 15:49:56 (11 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Ticket #555
- Property Status changed from new to assigned
-
Ticket #555 – Description
v2 v3 13 13 14 14 {{{ 15 $client = new dtb_client();15 $client = new Client(); 16 16 $client->name01 = "名前(姓)"; 17 17 $client->name02 = "名前(名)"; … … 19 19 ... snip 20 20 21 $pm = newPersistenceManager();21 $pm = getPersistenceManager(); 22 22 $pm->makePersistent($client); 23 23 }}} … … 26 26 27 27 {{{ 28 $pm = newPersistenceManager();28 $pm = getPersistenceManager(); 29 29 // PK が 1 の dtb_client のデータを取得する 30 $client = $pm->getObjectById( "dtb_client", 1);30 $client = $pm->getObjectById(new Client(), 1); 31 31 }}} 32 32 33 33 複数のレコードを取得する場合は, キーを配列で渡す. 34 34 $clients には, dtb_client の連想配列が入る. 35 同じキーが複数存在した場合は, IN 句の SQL になる.36 37 {{{38 $pm = new PersistenceManager();39 // PK が 1 と 2 の dtb_client のデータを取得する40 $clients = $pm->getObjectsById("dtb_client", array("client_id" => 1,41 "client_id" => 2));42 }}}43 35 44 36 LIKE 検索は, 連想配列のキーに suffix をつける. … … 46 38 47 39 {{{ 48 $pm = newPersistenceManager();40 $pm = getPersistenceManager(); 49 41 // email が nanasess を含むものを検索する. %value% のみのサポート 50 $clients = $pm->getObjectsById( "dtb_client", array("email__like" => "nanasess"));42 $clients = $pm->getObjectsById(new Client(), array("email__like" => "nanasess")); 51 43 }}} 52 44 53 45 === 実装(案) === 54 46 55 - 各テーブルのメタデータは, Builder パターンを利用して, PersistenceManager に関連するメタデータ用のクラスで実装する56 - 各DBの差異 も, 上記のメタデータ用クラスで吸収する.57 - SELECT とか, INSERT とかの処理は, PersistenceManager クラスが抽象化して行う. PEAR::DB とか, PDO に対するドライバを提供して, 差異を吸収する47 - 各テーブルのメタデータは, Abstract な Entity クラスで実装する 48 - 各DBの差異は, ADOdb などの抽象化ドライバで吸収する 49 - SELECT とか, INSERT とかの処理は, PersistenceManager クラスが抽象化して行う. 58 50 59 51 === 長所 === … … 62 54 - ソースコードがものすごくシンプルになる 63 55 - 慣れればメンテしやすい 64 - たぶん,EC-CUBE 以外でも使用可能56 - EC-CUBE 以外でも使用可能 65 57 66 58 === 短所 === 67 59 68 - もしかしたら車輪の再発明?60 - ~~もしかしたら車輪の再発明?~~ 良いものが無いので自分で作ります 69 61 - 慣れるまで大変 70 - SQL をゴリゴリ書けない71 - PHP4 で, どこまで実現できるか不明62 - ~~SQL をゴリゴリ書けない~~ 個別のクエリ, 複雑に JOIN した SQL や VIEW にも対応予定 63 - ~~PHP4 で, どこまで実現できるか不明~~ 今のところ PHP4 でも問題無し 72 64 - PersistenceManager とか, Builder 用のクラスがものすごいことになりそう 73 - あんまり速くない(たぶん)65 - ~~あんまり速くない(たぶん)~~ ADOdb の薄いラッパーなので, パフォーマンス悪くないはず 74 66 75 67 === 他の候補 ===