2011-05-25 21 views
1

私はこれに関する経験豊かな開発者のアドバイスが必要です。私にそれをまっすぐにさせてください。プレゼンテーション用のPHPクラス構造

ユーザーが記事を投稿しているため、記事の一覧を表示し、投稿したユーザーを表示する必要があります。私の海流precedural方法で

このようなその何か:

$result = mysql_getresult("SELECT users.*, articles.* 
          FROM users JOIN articles ON users.id = articles.user_id 
          WHERE 1"); 
while($row = mysql_getrow($result)) { 
    display_username($row); 
    display_articletitle($row); 
} 

今私はOO方法にOOと

class User { 
    protected $data; 

    public function loadUserData($id) { $this->data = mysql_readstuff() } 
    public function displayUserName() { echo $this->data['name'] } 
} 


class Article { 
    protected $data; 

    public function loadArticleData($id) { $this->data = mysql_readstuff() } 
    public function displayArticleTitle() { echo $this->data['title'] } 
} 

問題、それをやりたい:

1)これらのクラスを持っています自分のデータを読み込むための独自のメソッド(および他の多くのメソッド)があります。そのため、JOINですべてのデータを一度に取得するための高速なmysqlクエリは実際には動作しません。独自のデータを読み込むことは、他の多くの方法(例えば、認証)には最適です。

2.)プレゼンテーション(savant3 templaterを使用)を分けて、表示方法をどこに置くべきですか?私は多くの多くのもの(仕事、コメントなど)を表示する必要がありますし、私はtemplaterのそれぞれのためのメソッドを作ることは良いアイデアだとは思わない。

この例はユーザーと記事ですが、ユーザー+コメント、ユーザー+仕事+要件があります。

私は表示方法を静的にしてパラメータを取らせることを考えましたが、プロシージャメソッドと違いはありません。または、$ dataを設定したパラメータに設定するsetData($ row)メソッドを作成します。

おそらく、この問題の一般的な解決策があります。

アドバイスありがとうございます。

条クラスは、loadメソッド、または表示方法を持つべきではない、 Skaccer

答えて

1

、ありがとうございました。

私のアドバイスは、table gatewayを作成するには、次のようになります。

Class ArticleGateway { 

    getArticles(){} // returns an array of article objects 
    getArticlesByAuthor(Author $author) {} 

} 

$articleGateway = new ArticleGateway() {} 
$articles = $articleGateway->getArticles(); 

$articles文書オブジェクトの配列が含まれています。ビュー上で反復処理を行い、記事を表示することができます。 @galenが言ったとおりに

+0

ありがとう!私はそれについて考える(自分のサイドプロジェクト)、あなたに戻ってくるだろう。ページングされた結果、注文された結果、全文検索と非全文検索の結果を扱うことができ、すぐに検索エンゲインとしてスフィンクスを追加することができるものが必要です。結果を数える必要もあります。 [こちらは現在のページへのリンクです](http://www.networkdance.com/dance-ballet-auditions) - 右側の「詳細検索」をクリックしてください。そしてそれはもっと多くのページで起こる必要があります... – Skaccer

0

いけないあなたがそれらを表示する必要があるとして、あなたがそれらを扱う、彼らはデータの配列を返してみましょう、あなたのクラスのメソッドは、あなたのデータをプリントアウトしてみましょう:

Iの経験をこれは私のアプリケーションを開発するときです。私は自分のメソッドを使ってアンドロイドアプリのデータとウェブアプリケーションをロードすることができます