我有Java背景,最近我学到了一些Web开发语言背后的理论,而我的后端语言是PHP。另外,我开始使用CodeIgniter(我不确定它对我的问题是否重要,但无论如何)。
所以,我开始构建一个简单的画廊系统 - 但不确定架构是否正确(我基于我在Java中的背景,但我不知道Web开发是否相同)。
画廊系统非常标准:用户可以上传/删除图像和画廊,查看图库,查看图像和查看所有画廊(在这种情况下,将显示画廊的名称和最后添加的图像的拇指)。所有'观点'都有分页。
我在application/libraries/galleries
下创建了3个类:
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 .. }
}
这有点长,但实际上并不难理解。 说实话,我刚刚编写了代码,所以可能存在语法错误 - 但这不是重点。 关键是在代码和&& Web开发。这段代码的最大优点是没有重复的代码,非常清楚,实现了OO的想法。 我不确定的是 - 对象的创造是否必要且有效?我的意思是,web开发是一种相同的架构方法,例如,为Android手机构建游戏?数据库中的每个表(当然不是绑定表等)都有一个php类和对象?
答案 0 :(得分:1)
网络是一种传递机制,仅此而已。请参阅:http://www.youtube.com/watch?v=WpkDN78P884
正如您所说,为Android构建游戏并构建Web应用程序通常会遇到类似的架构挑战。没有建筑银弹 - 你的代码的形式和意图应该相互通知。
对象的创建永远不是必需的 - 一些程序员更愿意在汇编中编写Web应用程序!但是,对象可以是有价值的抽象。正如你所说,“这段代码的最大优点是没有重复的代码,非常清楚,实现OO的想法。”重要的优点是代码可读性和可维护性,它们(几乎完全)是主观的。作为代码库的维护者,您可以自行决定什么对您最有效。
现在,如果您正在寻找Web应用程序架构OPINIONS,请查看:http://12factor.net/