私はPHP(Kohana)でオブジェクト指向のMVCフレームワークを使用しており、いくつかの手法を組み合わせて作業を行っています。問題は、ページごとにたくさんのクエリを呼び出さずに物事をきれいに保つ方法がわからないことです。
私の例を説明するために、私はサイトのようなスタックオーバーフローを設計していると想像します。
質問用のモデルクラス(question_model
)と質問ファインダー用のモデルクラス(question_finder_model
)があります。
question_modelには主に、質問データ、回答オブジェクトの配列、およびいくつかのファクトリメソッドを格納するための変数が含まれています。何かのようなもの:
class question_model {
public $question_id,$question_title,$question_body,$answers = array();
}
質問ファインダーには、question_modelオブジェクトの配列と質問IDの配列が含まれています。IDの配列は、クラス内のfindメソッドによって入力され、他のメソッドによって使用されます。何かのようなもの:
class question_finder_model {
private $question_ids = array();
public $questions = array() ; //
function public find_questions () {
// executes some SQL to find a list of projects
// Create a new question_model object for each question and store in $questions
// for each of these questions store the id in $questions_ids
}
function public get_answer_info () {
// using all the question ids stored in $question_ids:
// find information about the answers
}
}
したがって、このメソッドをすべてのモデルに使用します。たとえば、ユーザーモデルには質問オブジェクトの配列が含まれます。
問題は、処理が非常に難しくなっていることです。たとえば、私の質問には多くの回答が含まれており、各回答には多くのコメントが含まれている可能性があります。いくつかのクエリを実行せずに、これらすべてのオブジェクトにデータを入力するにはどうすればよいですか。つまり、簡単な方法は、質問オブジェクトの配列を反復処理し、そのオブジェクトの回答情報を取得する質問クラス内に格納されている関数を呼び出すことです。しかし、その場合、ページごとに数十または数百のクエリを呼び出すことになります。
問題を明確にするのは非常に難しいので、これがすべて少しかすんでいる場合はお詫び申し上げます。perhpas私のパターン全体に欠陥があるので、どんな助けでもありがたいです。