0

PHPでDB上に抽象化レイヤーを構築しています。

私は PDO を使用しており、すべてが純粋な命令型スクリプトで完全に機能します。

今、私はこの一連のコード (Web サービス API) を MVC を使用した OOP アプローチに交換したいと考えており、DB インターフェイスを抽象化して (レース db 環境で) getRaceList(); のような呼び出しを実行しようとしています。または getRookieAthlets(); などから、他の場所にそれらを提示します。

呼び出される永続化クラスでこのようなことを行うと、完全に機能します

class Persistantance{

   //other methods

/**
 * return all races
 **/
public function getRaces(){

    $result = null;
    try {   
        $db = $this->connect(); //return a PDO object
        $query = "SELECT races.title, races.year, races.id FROM races;";
        //here use prepared statement statements if needed
        $result = $db->query($query);
        $races = array();
        foreach ($result as $record) {
            //here insert $record in $races
        }
        $result->closeCursor();

        $db = null;
    }catch(PDOException $e){
        // Print PDOException message
        echo $e->getMessage();
    }
    return $races;
}
}

class View{
    public function viewRaces(){
        //...
        $races = $pers->getRaces();
        foreach($races as $race)
            printRecord($race);
        //...
    }
}

それは機能しますが、$stmnt->fetchAll() と同様に、すべてをメモリに取り込むため、非常にメモリ集約的です。Db はかなり大きいですが、想像力のために非常に大きな配列を取得する可能性は低いですが、可能な限りサイズに依存しないパターンを知りたいです。反対に、イテレータを作成すると、Persistance インターフェイスがかなり複雑になります (インターフェイスを配布したい):

//from a view class
perist->a_query()
repeat untill null
    perist->fetch_last_query_next()
perist->close_conn()

さらに、複数の反復子メソッドを使用するインターフェイスをさらに複雑にしない限り、より多くのクエリを並行して実行することはできません。

4

0 に答える 0