我有一個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類和對象?
問題可能是更適合http://codereview.stackexchange.com/ –
是..如果你使用OOP然後特點你可以使用你在其他語言中使用的所有已知模式。但你有點與數組混合。在你的'Gallery'類中你返回數組。所以你可以優化它並返回對象。這不會很容易出錯。 – bitWorking
web只是用戶與應用程序交互的方式,它不應該影響您的架構。它只是定義了應用程序如何呈現數據以及應用程序如何從用戶接收數據 –