0

oop を使用して、ユーザー生成データのサイトを構築し始めています。

私のクラスからはさまざまな種類のデータが得られます。データベースからデータのリストを取得する関数と、それらのリストから 1 つの項目を選択する関数があります。例えば

function Get_Article($aid); //Gets an article
function Get_Users_Articles($uid); //Gets a multidemsional array of the users 
                                   //articles
function Get_Latest_Articles(); //Self explanatory by now
function Get_Local_Articles($zip); //Gets articles written by local users
function Get_Local_Users($zip); //Gets all local users

function Get_All_Article_Comments($aid); //Gets a multidimensional array of the 
                                     //comments written for an article
function Get_Article_Comment($cid); //Gets a single article comment

さて、これらの機能を整理するには、クラスをどのように設定すればよいでしょうか。それらをすべて同じクラスに入れるか、記事からコメントを分離するか、記事/コメントのリストを取得する関数から単一の記事/コメントを取得する関数を分離する必要があります。後でコメントを許可するものをサイトに追加する可能性があるため、すべてのコメント機能を他の機能から分離することを考えていました. また、「ローカル」関数はすべて、数学を実行する同じ関数を使用するため、それらをグループ化するか、単に継承を使用する必要があります...何か提案はありますか???

おっと、私は次のようなユーザークラスを持っています... private $user = array();

public function Get_User_Data($uid){
  //get user data from database
  return $this->user;
}

public function Set_User_Data($user_array){
  $this->user = $user_array;
}

public function Add_User(){
  //INSERT data from $this->user into the database 
}

メンバー変数を挿入する代わりに、Add_User 関数のパラメーターとして user_data を設定する必要がありますか?

4

1 に答える 1

6

まず最初に、古い手続き型の関数をオブジェクト内にラップしても、コードがオブジェクト指向にならないことを理解する必要があります。それは、より複雑で恐ろしく醜い手続き型のコードを記述していることを意味するだけです。

第二に、私が強くお勧めしたいのは、実際には、少なくとも世の中に出回っているさまざまな PHP フレームワークを少なくとも時間をかけて勉強することをお勧めします。それらのいずれも使用することはないかもしれませんが、それらのいずれかを学習することで、オブジェクト指向の原則と優れたアプリケーション設計全般をよりよく理解できることを保証できます。これまでに見たことがない場合は、次のことから始めてください。

  • Zend フレームワーク
  • シンフォニー
  • CakePHP
  • ソーラーフレームワーク

さらに、Martin Fowler や Patterns of Enterprise Application Architecture について聞いたことがない場合は、コピーを手に取ってみることを強くお勧めします。彼は文字通り、すべての一般的な Web フレームワークで使用されている基本的なパターンを提供する本を書きました。

私の「手動応答を読む」のはこれで終わりです:-P

あなたの特定のケースでは、データベース アクセス ロジックとドメイン ロジックを含む基本的な Active Record パターンから始めます。このタイプのパターンでは、各データベース テーブル (ユーザー、記事、コメント) が個別のオブジェクトで表されます。ユーザーの基本的な Active Record クラスには、特定のユーザーまたはユーザーのリストを取得するためのすべての関数と、ユーザーを挿入、更新、または削除するための関数が含まれます。さらに、User Active Record クラスには、ユーザーの記事とコメントをロードするメソッドが含まれます。

シェル User クラスは次のようになります。

class User extends Active_Record {

public function find() {}

/**
    Single function performs inserts and updates for the object
**/
public function save() {}

public function delete() {}

public function getArticles() {}

public function getComments() {}
}
于 2009-08-27T03:26:03.640 に答える