Changes between Version 2 and Version 3 of Ticket #555


Ignore:
Timestamp:
2009/12/01 15:49:56 (11 years ago)
Author:
nanasess
Comment:

手元の環境で, ある程度の実装ができてきたので, 説明を更新.

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #555

    • Property Status changed from new to assigned
  • Ticket #555 – Description

    v2 v3  
    1313 
    1414{{{ 
    15 $client = new dtb_client(); 
     15$client = new Client(); 
    1616$client->name01 = "名前(姓)"; 
    1717$client->name02 = "名前(名)"; 
     
    1919... snip 
    2020 
    21 $pm = new PersistenceManager(); 
     21$pm = getPersistenceManager(); 
    2222$pm->makePersistent($client); 
    2323}}} 
     
    2626 
    2727{{{ 
    28 $pm = new PersistenceManager(); 
     28$pm = getPersistenceManager(); 
    2929// PK が 1 の dtb_client のデータを取得する 
    30 $client = $pm->getObjectById("dtb_client", 1); 
     30$client = $pm->getObjectById(new Client(), 1); 
    3131}}} 
    3232 
    3333複数のレコードを取得する場合は, キーを配列で渡す. 
    3434$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 }}} 
    4335 
    4436LIKE 検索は, 連想配列のキーに suffix をつける. 
     
    4638 
    4739{{{ 
    48 $pm = new PersistenceManager(); 
     40$pm = getPersistenceManager(); 
    4941// email が nanasess を含むものを検索する. %value% のみのサポート 
    50 $clients = $pm->getObjectsById("dtb_client", array("email__like" => "nanasess")); 
     42$clients = $pm->getObjectsById(new Client(), array("email__like" => "nanasess")); 
    5143}}} 
    5244 
    5345=== 実装(案) === 
    5446 
    55  - 各テーブルのメタデータは,  Builder パターンを利用して, PersistenceManager に関連するメタデータ用のクラスで実装する 
    56  - 各DBの差異も, 上記のメタデータ用クラスで吸収する.  
    57  - SELECT とか, INSERT とかの処理は, PersistenceManager クラスが抽象化して行う. PEAR::DB とか, PDO に対するドライバを提供して, 差異を吸収する 
     47 - 各テーブルのメタデータは,  Abstract な Entity クラスで実装する 
     48 - 各DBの差異は, ADOdb などの抽象化ドライバで吸収する 
     49 - SELECT とか, INSERT とかの処理は, PersistenceManager クラスが抽象化して行う. 
    5850 
    5951=== 長所 === 
     
    6254 - ソースコードがものすごくシンプルになる 
    6355 - 慣れればメンテしやすい 
    64  - たぶん, EC-CUBE 以外でも使用可能 
     56 - EC-CUBE 以外でも使用可能 
    6557 
    6658=== 短所 === 
    6759 
    68  - もしかしたら車輪の再発明? 
     60 - ~~もしかしたら車輪の再発明?~~ 良いものが無いので自分で作ります 
    6961 - 慣れるまで大変 
    70  - SQL をゴリゴリ書けない 
    71  - PHP4 で, どこまで実現できるか不明 
     62 - ~~SQL をゴリゴリ書けない~~ 個別のクエリ, 複雑に JOIN した SQL や VIEW にも対応予定 
     63 - ~~PHP4 で, どこまで実現できるか不明~~ 今のところ PHP4 でも問題無し 
    7264 - PersistenceManager とか, Builder 用のクラスがものすごいことになりそう 
    73  - あんまり速くない(たぶん) 
     65 - ~~あんまり速くない(たぶん)~~ ADOdb の薄いラッパーなので, パフォーマンス悪くないはず 
    7466 
    7567=== 他の候補 ===