2009-08-27 40 views
0

我開始使用oop來構建用戶生成數據的網站。我應該如何設置我的課程?

有不同類型的數據從我的班來了。 我有從數據庫中獲取數據列表的函數,並且只能從這些列表中選擇一個項目。 例如

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 

現在,我應該怎麼設置我的班來組織這些功能。 我應該把它們全部放在同一個班級,還是應該將文章中的評論分開,或者將檢索單篇文章/評論的功能與檢索文章/評論列表的功能分開。之後我可能會在網站上添加更多可以發表評論的內容,所以我只是想將其他評論功能與所有評論功能分開。此外,「本地」功能都使用執行數學的相同功能,所以我應該將它們組合在一起,或者只是使用繼承......任何建議?

雖然在OOP的問題,我有一個用戶類,看起來像...... 私人$ USER =陣列();

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函數中的參數,而不是插入的成員變量?

回答

6

首先,您需要明白,將舊的過程樣式函數包裝到對象中並不會使您的代碼面向對象,這只是意味着您正在編寫更復雜和可怕的醜陋過程代碼。

其次我會強烈建議,其實我不能在你需要一些時間來至少研究各種PHP框架是在那裏我的建議太費勁。雖然你可能永遠不會使用它們中的任何一個,但我保證在研究它們時能夠更好地掌握面向對象原則和良好的應用程序設計。如果你從來沒有見過任何之前,下面應該給一個地方開始:

  • Zend框架
  • Symfony的
  • CakePHP的
  • 太陽能框架

此外,如果您我從來沒有聽說過Martin Fowler或企業應用程序體系結構模式,我強烈建議您嘗試提供一份副本。他從字面上寫了這本書,該書提供了在各種流行的Web框架中使用的基本模式。

這麼多我的「閱讀手冊響應」 :-P

在您的特定情況下,我將開始與包含你的數據庫訪問邏輯和域邏輯基本活動記錄模式。在這種類型的模式中,每個數據庫表(用戶,文章,評論)都由離散對象表示。用戶的基本Active Record類將包含獲取特定用戶或用戶列表的所有功能以及插入,更新或刪除用戶的功能。另外,User Active Record類將包含加載用戶文章和評論的方法。

一個shell用戶類可能是這個樣子:

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() {} 
} 
相關問題