2013-01-17 53 views
3

我有一個Java的背景,最近我學到了一些Web開發語言背後的理論,而我的後端語言是PHP。另外,我開始使用CodeIgniter(我不確定它是否對我的問題有影響,但無論如何)。因此,我開始構建一個簡單的圖庫系統 - 但不確定該架構是否正確(我基於Java中的背景,但我不知道web開發是否相同)。畫廊系統非常標準:用戶可以上傳/刪除圖像和畫廊,查看畫廊,查看圖像和查看所有畫廊(在這種情況下畫廊名稱被顯示,最後添加圖像的拇指)。所有'觀點'都有分頁。網站/網絡應用程序開發的正確架構

我在3類,application/libraries/galleries下:

gallery_actions.php:

class Gallery_Actions { 

// Nuber of galleries to display in one page 
const galleriesPerPage = 4; 

public function getGalleries($page) { 
    $q = .. query ..; 

    return $this->getObjectGalleryArray($q->result_array()); 
} 

public function getFeatureGallery() { 
    $gallery = .. query .. ->row_array(); 

    return new Gallery($gallery); 
} 

public function getPopularGalleries($limit) { 
    $q = .. query ..; 

    return $this->getObjectGalleryArray($q->result_array()); 
} 

// Get database galleries array and return object galleries array 
private function getObjectGalleryArray($q = array()) { 
    $galleries = array(); 

    foreach ($q as $gallery) { 
    $galleries[] = new Gallery($gallery); 
    } 

    return $galleries; 
} 

} 

gallery.php:

class Gallery { 

    // holds gallery info from DB 
    // int id, varchar(255) name, varchar(255) lastImg, int countImgs 
    public $config = array(); 

    // Nuber of imgs to display in one page 
    const imgsPerPage = 12; 

    // In most cases (maybe at all), gets all config. sometimes only id. 
    function __construct($params = array()) { 
    if (count($params) > 0) { 
     foreach ($params as $key => $val) { 
     $this->config[$key] = $val; 
     } 
    } 
    } 

    // Watch inside gallery 
    public function getGallery($page) { 
    return array[ 
     'info' => $this->config, 
     'images' => $this->getImagesOfGallery($page) 
    ]; 
    } 

    // Watch when browse galleries 
    public function getPreview() { 
    return array[ 
     'name' => $this->config['name'], 
     'lastImg' => new Gallery_Image($this->config['lastImg']), 
     'url'  => $this->config['url'] 
    ]; 
    } 

    private function getImagesOfGallery($page) { 
    $q = .. query ..; 

    $imgs = array(); 

    foreach ($q->result_array() as $img) { 
     $imgs = new Gallery_Image($img); 
    } 

    return $imgs; 
    } 

    public function create() { .. } 

    public function uploadImages() { .. } 

    public function delete() { .. } 

    private function updateCount() { .. } 

} 

Gallery_Image:

class Gallery_Image { 

// holds img info from DB 
// int id, varchar(255) name, varchar(255) url 
public $config; 

// In most cases gets all config OR only id. 
function __construct($params) { 
    if (count($params) > 0) { 
    foreach ($params as $key => $val) { 
     $this->config[$key] = $val; 
    } 
    } 
} 

public function getImage() { return $this->config; } 

public function update() { .. } 

public function delete() { .. } 

public function getThumb() { .. return url string .. } 

} 

這有點長,但它並不難理解。 說實話,我剛纔寫了代碼,所以也許有語法錯誤 - 但那不是重點。 重點是在網頁開發代碼& & OOP的混合。這段代碼的主要優點是沒有重複的代碼,非常清楚地實現了面向對象的思想。 我不確定 - 是創建必要且有效的對象?我的意思是,網頁開發是一種架構方法,例如爲Android手機構建遊戲?數據庫中的每個表(當然不是綁定表等)有一個php類和對象?

+0

問題可能是更適合http://codereview.stackexchange.com/ –

+0

是..如果你使用OOP然後特點你可以使用你在其他語言中使用的所有已知模式。但你有點與數組混合。在你的'Gallery'類中你返回數組。所以你可以優化它並返回對象。這不會很容易出錯。 – bitWorking

+0

web只是用戶與應用程序交互的方式,它不應該影響您的架構。它只是定義了應用程序如何呈現數據以及應用程序如何從用戶接收數據 –

回答

1

網絡是一種交付機制,僅此而已。請參閱:http://www.youtube.com/watch?v=WpkDN78P884

正如您所說,構建Android遊戲並構建Web應用程序通常會遇到類似的體系結構挑戰。沒有建築銀彈 - 你的代碼的形式和意圖應該互相通報。

創建對象從不需要 - 有些程序員更喜歡用程序集編寫web應用程序!但是,對象可能是一個有價值的抽象。正如你所說,「這段代碼的巨大優勢在於沒有重複的代碼,非常清楚,實現了面向對象的思想。」代碼可讀性和可維護性是重要的優點,它們都是(幾乎全部)主觀的。作爲代碼庫的維護者,由您決定什麼對您最有效。

現在,如果你正在尋找的Web應用程序架構的意見,檢查了這一點:http://12factor.net/