私は 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 クラスとオブジェクトがありますか?