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

}

少し長いですが、理解するのは難しくありません。正直なところ、コードを書いたばかりなので、構文エラーがあるかもしれませんが、それは問題ではありません。ポイントは、コード&& Web開発でのOOPの混在です。このコードの大きな利点は、コードの重複がないことです。非常に明確に、オブジェクト指向のアイデアを実現しています。よくわからないこと - オブジェクトの作成は必要かつ効果的ですか? つまり、Web 開発は、たとえば Android フォン用のゲームを構築するのと同じアーキテクチャ手法ですか? データベース内の各テーブル (もちろんバインディング テーブルなどではありません) には、php クラスとオブジェクトがありますか?

4

1 に答える 1

1

Web は配信メカニズムであり、それ以上のものではありません。参照: http://www.youtube.com/watch?v=WpkDN78P884

あなたが言ったように、Android 用のゲームを構築することと Web アプリケーションを構築することは、多くの場合、同様のアーキテクチャ上の課題を抱えています。アーキテクチャに特効薬はありません。コードの形式と意図が相互に通知し合う必要があります。

オブジェクトの作成は決して必要ではありません。一部のプログラマーは、アセンブリで Web アプリを作成することを好みます。ただし、オブジェクトは価値のある抽象化になる可能性があります。あなたが言ったように、「このコードの大きな利点は、コードの重複がないことです。非常に明確に、オブジェクト指向のアイデアを実現します。」重要な利点はコードの可読性と保守性ですが、どちらも (ほぼ完全に) 主観的なものです。何が最も効果的かを判断するのは、コードベースの管理者であるあなた次第です。

Web アプリ アーキテクチャの意見をお探しの場合は、こちらをご覧ください: http://12factor.net/

于 2013-03-19T15:38:51.670 に答える