この記事を長い間書こうと思っていましたが、時間がなくて書き上げることができませんでした。私はその方法を説明するためにここにいるのではなく、この記事が効果的で柔軟なネットワーク アプリケーションを構築する方法について議論するための単なる紹介になれば幸いです。
Web アプリケーションの開発を 2 ~ 3 年続けた後、Geocrawler 用に書いたコードを振り返ると、それが自分のものであるとは信じられなくなりました。 GPLのため、PHPBuilderのソースコードも混在しています。
最近、私は経験豊富な PHP 開発者として、SourceForge の作成を手伝っていますが、これが最終結果の範囲を示していると思います。優れたコードは、適切なライブラリと関数呼び出しを備えた複数の部分に分割され、サイトの各部分が他の部分から比較的独立している必要があります。
しかし、これはまだ最善ではありません。もしやり直せるとしたら、HTML 層をデータ層から分離することにもっと重点を置き、オブジェクトと明確な関数ライブラリを通じてこれを実現するでしょう。
美しいグラフィック
マネージャーが美しいグラフやチャートを使って説明することを好むのはわかっています。これは私たちに最高の印象を残すでしょう。構造の背後に隠すというこのアイデアを使用すると、ロジックを外観から分離できます。これは、あらゆる複雑なプログラムを「API/データ アクセス レイヤー」で表現できることを意味します。
セキュリティチェックや更新された文などを HTML 層に入れるのではなく、API 層にまとめて入れる方が良いでしょう。この HTML レイヤーには、単純な関数呼び出しと返された配列、オブジェクト、その他のカスタム オブジェクト、およびデータベース検索結果のコレクションなどのみが含まれています。
これを行うと、最上位レベルが非常に薄くなり、作成とメンテナンスが簡単になります。
次の例では、この HTML インターフェイスには、API レイヤーの関数への直接呼び出し、いくつかの HTML ツール ライブラリ (ポップアップ ボックスなどを生成できます)、およびデータベースからのいくつかの呼び出しのみがあります。抽象化レイヤー。データベース操作メソッド (特定のデータベースにバインドする必要はありません)。
基本
柔軟な PHP プログラム構造の最も基本的な側面は次のとおりです。
データベースの独立性
インターフェイスの独立性
移植性
オブジェクト指向、または少なくとも次のもので構成される必要があります。関数ライブラリ
他にもありますか?
もちろん他にもいくつかありますが、それらは大きすぎると思いますので、ご自身で指摘していただいてもよいでしょう。
それぞれについて詳しく説明します。
1. データベースの独立性
サイトを作成するときは、サイトをどこで実行するかわかりません。もちろん、サイトを大きくしてフローを増やす必要があります。したがって、MS Access やその他の軽量データベース システムに縛られる必要はありません。さまざまなデータベース システムにすぐに接続することはできませんが、それらを簡単に切り替えることができる可能性があります。データベース呼び出しを抽象化するには、いくつかの異なるオプションがあります。 PHP の独特なアプローチは、PHP の異なるデータベースごとにアクセス関数が異なるため、異なるデータベース システムごとに異なるコードを記述する必要があることです。これを回避するには、PHPLib、PEAR の次のバージョン、および SourceForge で説明されているもののような、抽象データベース アクセス レイヤーを使用できます。
2. インターフェースの関連性
アプリケーションのテクノロジーとそれが実行されるサイトのどちらが重要ですか?本当のところは分かりません。私はこれを信じていませんでした - HTML は標準です。特に Web アプリケーションの場合、インターフェイスを変更すると、常に書き直す必要があります。ただし、アプリケーションが大規模で複雑な場合は、アクセス チェックやその他のコードをサイト プログラムのあらゆる場所にコピー アンド ペーストしたくない限り、データベース用に他のインターフェイスを確立する必要があります。これは、アプリケーションを正しく設計すれば、単純に小さな WAP インターフェイスを作成してデータベース アクセス オブジェクトを呼び出すだけで、サイトを簡単に書き換えることができることも意味します。しかし、プログラムを適切に設計しないと、HTML バージョンを WAP バージョンに変更するのは複雑なプロジェクトになります。
私はこのアイデアを SourceForge にも取り入れました。私たちのためにバグやタスクなどを送受信してくれる巨大なユーザー ベースがあります。まず、私たちはこれらすべてが Web ページを通じてインターフェースされることを指摘しました。その後、Eric Raymond やその他の人々からの圧力により、データベースへの外部インターフェースに XML を使用することにしました。
幸いなことに、私たちは 4 月にプログラムのコアロジックコードをインターフェースから分離しました。私たちのやり方を説明してみます。あなたの仕事に役立つことを願っています。
SourceForge バグ トラッカーとその他のツールは、HTML ライブラリとデータ アクセス ライブラリの 2 つのライブラリに分割されています。このデータ アクセス ライブラリは、入力された値の正確性をチェックし、セキュリティ チェックを処理し、成功/失敗時に TRUE または FALSE を返します。
簡略化の理由により、この例は完全なオブジェクト モデルに基づいていないため、この基本クラスとその派生クラスなどについて説明する必要があります。この例は最も一般的なアイデアを提供すると思います。 。HTML ライブラリの例
//データベースに接続します
require ("database.php");
//ヘッダー/フッター HTML などの一般的なユーティリティ
require ("html. php");
//データ アクセス ライブラリ
require ("bug_data.php");
echo site_header("ページ タイトル");
echo "
バグを更新する
";
if (bug_data_update($field1,$field2,$field3)) {
echo "
アップデートに失敗しました!
";
} else {
エコー "
バグが正常に更新されました
";
//グローバル エラー文字列をエコーします
echo $フィードバック;
}
echo site_footer();
?>
データアクセスライブラリの例
3. 移植性
コードを固定サイトでのみ使用したくない場合は、色の選択を変更する場合があります。将来、要素名、フォントなどを設定する場合は、複数のページに含まれる構成ファイルをセットアップする必要があります。サイトがモジュール式であり、単一の HTML ファイルをコピー&ペーストする必要がない方が良いと思います。これらを関数に入れて、必要なときに呼び出します。
データベースのパスワード、データベース接続文字列などにも同じアプローチを使用できます。これらは、データベース処理のために抽象化レイヤーに入れることができます。>
4. オブジェクト指向/関数型
私たちは COBOL で開発しているわけではないので、各呼び出しは自動的な動作であり、場合によっては短いセクションを呼び出すだけです。他の関数を実行し、結果を返します
良い例は、ユーザーが各ページでログインしているかどうかを確認することです。Cookie を使用するか、データベースにクエリを実行してこの機能を実行できますが、検証を変更したい場合は一度だけ行ってください。システムでは、すべてのページを変更する必要がありますが、コードを複数の場所で使用する場合は、関数ライブラリ内の通常の関数を変更することで実行できるはずです。
他には何がありますか?
もちろん、まだ話していないことがたくさんあります。あなたのアイデアを教えてください。次の記事で説明します。特に、大規模で複雑なアプリケーションを作成した場合、どのように計画したか、やり直すと何が変わると思うかを聞きたいです。