PHP でのスマート アーキテクチャの使用_PHP チュートリアル

WBOY
リリース: 2016-07-21 16:04:54
オリジナル
759 人が閲覧しました

ずっとこの記事を書こうと思っていたのですが、なかなか時間が取れませんでした。これは、その方法を説明することを目的としたものではありません。優れたスケーラブルな Web アプリケーションを開発する方法に少しでも光を当てることができれば幸いです。

私は 2 ~ 3 年間開発に携わってきました。最初に作成したプログラムを振り返ると、自分で作成したとは思えません。今では、sourceForge (http. :/ /sourceforge.net/) は、私のより成熟した作品の 1 つであり、コードはさまざまなクラスと関数に分割されています。データベースの構造も非常に明確です。サイトのさまざまな部分は他の部分から独立しています。

しかし、このサイトは完璧ではありません。もう一度書かなければならない場合は、オブジェクトまたは関数ライブラリを通じて HTML 層とデータベース層をより明確に区別するつもりです。

多くのマネージャーが自分のアイデアをチャートの形で表現することを好むことがわかりました。ここでもそれを提供します。このシステムの考え方は、ロジックを表層から分離することです。つまり、複雑なものはすべて「API/データ アクセス層」にプッシュダウンされます。

セキュリティチェックや更新などのコードについては、HTML 層に配置しないことが最善であり、これらの理論上のコードは API 層に配置する必要があります。 HTML レイヤーは単純な関数呼び出しを行い、配列、オブジェクト、または私のお気に入りのデータベース結果セットを返すだけです。

この図では、HTML インターフェイスは API レイヤーを直接呼び出すか、HTML ツール ライブラリ (ポップアップ ウィンドウの生成など) を呼び出します。これらのライブラリはデータベース抽象化レイヤーを通じてデータベースを呼び出すことができます (つまり、データベース上の何らかの種類にバインドする必要はありません)。

基本ポイント
スマートシステムには以下の基本ポイントがあります:
1.データベースに依存しない
2.プレゼンテーション層の独立
3.簡単に変更できます
4.オブジェクト指向、または少なくとも関数ライブラリ呼び出しに分割する
これらは私が考えたものです。上記に加えて、他にもポイントがあるはずです。フォーラムで提案してください。

上記の点について、以下で詳しく説明します。

1.データベースの独立性
設計時には、サイトにかかる負担がどれほど大きいかわからない場合があります。そのため、MS Access などの軽量データベースにバインドできないことを覚えておく必要があります。したがって、データベースを変更する場合は、あまり多くの変更を加える必要がなく、これが理想的です。

PHP を使用する場合、さまざまなデータベースの関数呼び出しが異なるため、使用するデータベースに応じて異なるコードを記述する必要があります。この状況を変えるには、PHPLib などのデータベース抽象化レイヤーや他者が開発したライブラリを使用できます。
2.プレゼンテーション層の独立性
本当に巨大で複雑なアプリケーションを開発したい場合は、コピーアンドペーストの作業を大幅に減らすために、データベースのインターフェースについて考え始める必要があります。たとえば、携帯電話ユーザーがアクセスできるように、サイトを WAP 対応にする必要があります。アプリケーションが適切に設計されている場合は、すべてのデータベース アクセス オブジェクトを呼び出すための軽量の WAP プレゼンテーション層を作成するだけで済みます。ただし、アプリケーション システムが適切に設計されていない場合は、それを書き直す必要があるため、 HTML バージョンと WAP バージョンを同時に。

たとえば、SourceForge サイトを開発しているとき、多数のユーザーがバグやタスクなどを送信しました。当初、私たちはすべて Web インターフェイスを通じて実行できるように設計しました。その後、何人かの人々からの圧力を受けて、データベースの表示に XML インターフェイスを使用することにしました。サイトのコア ロジックをプレゼンテーション層から分離することに成功しました。 SourceForge の現在のバグ追跡ツールとその他のツールは、HTML ライブラリ クラスとデータベース クラスという 2 つの異なるライブラリを使用します。データ クラスは入力値が有効かどうかを確認し、セキュリティ検出を処理する責任を負いますが、プレゼンテーション層は成功/失敗に基づいて true または false を返すだけです。 簡単にするために、この例は完全なオブジェクト モデルに基づくものではありませんが、基本クラスと、他のオブジェクトがこれらの基本クラスをどのように拡張するかを説明する必要があります。しかし、この例はいくつかの概念を確立するのに役立つと思います。

HTMLクラスの例

//データベースに接続します
require("database.php");

//よく使われるHTMLヘッダー/フッター

//データアクセスライブラリclass
require ("bug_data.php");

echo site_header("ページタイトル");

echo "
バグを更新中


"; ) {

echo "

アップデートに失敗しました!
"; else {

echo "
バグは正常に更新されました
";えー() ;

?>

データアクセスライブラリの例

/**
* 更新データベースのバグを制御します
* データの有効性とセキュリティをチェックし、成功した場合は true を返します。
* 失敗した場合は false を返します
*
*
*/

function bug_data_update ($field1,$field2,$field3) {
//グローバル文字列、エラーを返す
global $フィードバック;

//$field1 と $field2 は必須です
if (!$field1 || !$field2) {
$フィードバック="フィールド 1 とフィールド 2 は必須です"
return false
}

//それを確認します。ユーザーは更新する権利があります
if (!user_isadmin()) {
$フィードバック="バグを更新するには管理者である必要があります"
return false
}

//バグを更新できるようになりました

$ result=db_query("UPDATE bug ".
"SET field2='$field2',".
"field3='$field3' ".
"WHERE id='$field1'");

// now ステートメントが正常に実行されたかどうか
if (!$result) {
//update が失敗しました
return false;
} else {
return true;

?>変更は簡単です
もちろん、アプリケーション全体で絶対 URL を使用することはありませんが、色、要素名、フォント、その他の可能なオプションの選択は絶対的なものではなく、構成内に含める必要があります。ファイルを作成し、それをすべてのページに含めます。サイトのスタイルも自己完結型である必要があります。そのため、すべてのページにコピーして貼り付ける必要はありません。通常、HTML を関数に入れて、必要なときに呼び出すことができます。

データベースパスワード、データベース接続などについても、データベース抽象化レイヤーに配置されます。

4.オブジェクト指向/関数型
プロセス処理をさまざまな関数呼び出しに分割できます。各呼び出しは 1 つのことを行いますが、他の関数を呼び出して結果を返すだけで済む場合もあります。

良い例は、ユーザーがログインしているかどうかをすべてのページでチェックインすることです。オブジェクトや関数を使用しない場合、認証システムが変更されたときに、ライブラリ内の関数呼び出しを変更するだけでなく、各ページで変更を加える必要があります。コードを作成する前に、そのコードをサイト内で複数回使用する場合は、ライブラリに移動する必要があることを考えてください。 何か追加することはありますか?
思いつかなかった点もあるかと思いますが、ご意見お聞かせください。特に、大規模で複雑なアプリケーションを作成しましたが、再度作成する必要がある場合、どのようなシステムを構築するのか、どのような変更を加えるのかを知りたいと考えています。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/315828.html技術記事ずっとこの記事を書こうと思っていたのですが、なかなか時間が取れませんでした。これはその方法を説明するものではありません。開発方法に光を当てることができれば幸いです...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!