正确的网站/ web应用程序开发架构


The right architecture of website / web app development

我有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 .. }
}

它有点长,但它真的不难理解。老实说,代码是我刚刚写的,所以可能有语法错误——但这不是重点。关键是OOP在代码中的混合&&web开发。这段代码的最大优点是没有重复的代码,非常清楚地实现了OO的思想。我不确定的是——对象的创造是必要和有效的吗?我的意思是,网页开发是相同的架构方法,例如,为android手机开发游戏?数据库中的每个表(当然不是绑定表等)都有一个PHP类和对象?

网络是一种传递机制,仅此而已。参见:http://www.youtube.com/watch?v=WpkDN78P884

正如你所说,为android开发游戏和开发web应用程序通常面临类似的架构挑战。没有架构上的灵丹妙药——代码的形式和意图应该相互通知。

对象的创建从来没有必要——一些程序员更喜欢用汇编语言编写web应用程序!然而,对象可以是一种有价值的抽象。正如您所说,"此代码的最大优点是没有重复的代码,非常清楚地实现了OO的思想。"重要的优点是代码的可读性和可维护性,这两者(几乎完全)是主观的。由您作为代码库的维护者来决定什么对您最有效。

现在,如果你正在寻找web应用程序架构的意见,看看这个:http://12factor.net/