PHPマスター|ファサードパターンで複雑さを管理します
キーテイクアウト
- ファサードは、ほぼすべてのWebアプリケーションで使用される設計パターンであり、複雑なプロセスを簡素化し、より合理化されたユーザーエクスペリエンスを可能にします。 ファサードパターンはシステムの複雑さを隠し、単純化されたインターフェイスを提供し、各ユニットが他のユニットについて最小限の知識を持つべきである知識の最小の原則に準拠しています。
- ファサードパターンの実際のアプリケーションには、サードパーティ認証サービスのファサードインターフェイスとして機能するOpauthライブラリと、WordPressのupdate_post_meta()関数が含まれます。 🎜> ファサードパターンは、コードの読みや使用性を向上させ、サブシステムとそのクライアント間のデカップリングを促進し、複雑なサブシステムへのインターフェイスを簡素化するため、有益です。ただし、あまりにも多くの機能がファサードに配置されている場合、それはボトルネックになり、クライアントからサブシステムの有用な機能を非表示にする可能性があります。
- 本を借りるプロセス
- ライブラリ管理システムのアプリケーションを開発していると仮定します。本の借入と返還は、明らかにそのようなシステムの2つの最も重要なタスクです。ただし、本の借入プロセスの典型的な実装を考えてみましょう。
ユーザーは、延期された本に罰金を支払う必要があります。
- ユーザー、または図書館スタッフのメンバーが新しい本を検索します。
- 本の可用性は検証されています。
- 上記の手順が正常に完了した場合、本の場所を取得する必要があります。 ユーザーは本を借ります。
- 本のステータスは、システムでは利用できないとマークされています。
<span><span><?php </span></span><span><span>public class User </span></span><span><span>{ </span></span><span> <span>public function borrowBook() { </span></span><span> <span>$bookManager = new Book_Manager(); </span></span><span> <span>$bookManager->returnBooks(); </span></span><span> </span><span> <span>$bookPayments = new Book_Payments(); </span></span><span> <span>if ($bookPayments->hasOverdueBooks()) { </span></span><span> <span>$bookPayments->payBookFines(); </span></span><span> <span>} </span></span><span> </span><span> <span>$bookLibrary = new Book_Library(); </span></span><span> <span>$bookReservations = new Book_Reservations(); </span></span><span> </span><span> <span>$book = $bookLibrary->searchBooks(); </span></span><span> <span>$isAvailable = $bookLibrary->isBookAvailable($book); </span></span><span> <span>$isReserved = $bookReservations->isBookReserved($book); </span></span><span> <span>if ($isAvailable && !isReserved) { </span></span><span> <span>$bookLibrary->locateBook($book); </span></span><span> </span><span> <span>$bookManager->borrowBook($book); </span></span><span> <span>$bookLibrary->updateBookAvailability($book, $status); </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>}</span></span>
<span><span><?php </span></span><span><span>class Library_Facade </span></span><span><span>{ </span></span><span> <span>public function returnBooks() { </span></span><span> <span>// previous implementation by calling necessary classes </span></span><span> <span>} </span></span><span> </span><span> <span>public function borrowBooks() { </span></span><span> <span>} </span></span><span> </span><span> <span>public function searchBooks() { </span></span><span> <span>} </span></span><span> </span><span> <span>public function reserveBooks() { </span></span><span> <span>} </span></span><span><span>}</span></span>
<span><span><?php </span></span><span><span>class User </span></span><span><span>{ </span></span><span> <span>public function borrowBook() { </span></span><span> <span>$libraryFacade = new Library_Facade(); </span></span><span> <span>$libraryFacade->borrowBook(); </span></span><span> <span>} </span></span><span><span>}</span></span>
ファサードパターンの定義
ファサードパターンを実装するプロセスと重要性を特定したので、パターンの定義を学ぶ時が来ました。以下はウィキペディアから抽出されています。ファサードは、クラスライブラリなど、より大きなコードボディに単純化されたインターフェイスを提供するオブジェクトです。ファサードは:
- ファサードには一般的なタスクの便利な方法があるため、ソフトウェアライブラリを使いやすく、理解し、テストしやすいものにします。 同じ理由で、ライブラリをより読みやすくします;
ほとんどのコードはファサードを使用してシステムの開発においてより柔軟性を可能にするため、- 外部コードの依存関係を削減します。
は、十分に設計されたAPIのコレクションを1つの適切に設計したAPIで包みます。 ファサードパターンの定義に記載されているコンポーネントを識別するライブラリの例のクラス図を次に示します。Real Worldの実装
前のセクションでは、ライブラリシステムを例として使用して、ファサードパターンの背後にある理論を学びました。現実の世界では、ファサードは、ライブラリシナリオの実装よりもはるかに複雑になる可能性があります。実際のアプリケーションとライブラリのコンテキストで、パターンのいくつかの実装を確認しましょう。 オープン認証のためのOpauth
私は最近、Opauthという人気のあるオープン認証ライブラリに関する記事を書きました。まだお届けしない場合は、読むことをお勧めします。プロのソーシャルネットワークサイトを開発したと仮定し、ユーザーがTwitter、LinkedIn、Facebookなどの他の人気のあるサイトを使用して認証できると仮定します。認証プロセスを完了するために、既存のサードパーティライブラリを使用して、ネットワークのサービスにアクセスします。目的の機能を達成するためのTwitterライブラリを使用して、いくつかのサンプルコードを見てみましょう。ご覧のとおり、Twitter固有のライブラリメソッドのセットを呼び出して、目的の機能を実装します。 LinkedInとFacebookの両方に同様のアプローチが必要です。プロセスはすでに複雑になっています。 Twitter、Facebook、またはLinkedInアプリケーションを開発していません。資格情報を検証し、ユーザーを認証するだけです。当社のアプリケーションは、これらの各サービスの実装について心配するべきではありません。 Opauthライブラリをファサードインターフェイスとして使用することにより、この問題を解決できます。まず、Opauthプラグインによって識別される共通形式で目的のサービスのログインURLを指定する必要があります。認証プロセスを実装するための次のコードを検討してください。<span><span><?php </span></span><span><span>public class User </span></span><span><span>{ </span></span><span> <span>public function borrowBook() { </span></span><span> <span>$bookManager = new Book_Manager(); </span></span><span> <span>$bookManager->returnBooks(); </span></span><span> </span><span> <span>$bookPayments = new Book_Payments(); </span></span><span> <span>if ($bookPayments->hasOverdueBooks()) { </span></span><span> <span>$bookPayments->payBookFines(); </span></span><span> <span>} </span></span><span> </span><span> <span>$bookLibrary = new Book_Library(); </span></span><span> <span>$bookReservations = new Book_Reservations(); </span></span><span> </span><span> <span>$book = $bookLibrary->searchBooks(); </span></span><span> <span>$isAvailable = $bookLibrary->isBookAvailable($book); </span></span><span> <span>$isReserved = $bookReservations->isBookReserved($book); </span></span><span> <span>if ($isAvailable && !isReserved) { </span></span><span> <span>$bookLibrary->locateBook($book); </span></span><span> </span><span> <span>$bookManager->borrowBook($book); </span></span><span> <span>$bookLibrary->updateBookAvailability($book, $status); </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>}</span></span>ログイン後にコピーログイン後にコピーログイン後にコピーログインリンクが要求されると、OpauthはURLから要求されたサービスを識別し、ライブラリを初期化してユーザーを認証にリダイレクトします。アプリケーションは、ログインリンクを作成し、初期化メソッドを呼び出すだけで必要です。すべての複雑な認証のものは、各サービスのそれぞれのライブラリを使用して、舞台裏で処理されます。これは、ファサードパターンを効果的に使用するための完璧な例と見なすことができます。<span><span><?php </span></span><span><span>class Library_Facade </span></span><span><span>{ </span></span><span> <span>public function returnBooks() { </span></span><span> <span>// previous implementation by calling necessary classes </span></span><span> <span>} </span></span><span> </span><span> <span>public function borrowBooks() { </span></span><span> <span>} </span></span><span> </span><span> <span>public function searchBooks() { </span></span><span> <span>} </span></span><span> </span><span> <span>public function reserveBooks() { </span></span><span> <span>} </span></span><span><span>}</span></span>ログイン後にコピーログイン後にコピーWordPress Meta関数
WordPressは、コードの品質を考慮して、真剣なPHP開発者の中で最も人気のあるフレームワークの1つではありません。ただし、WordPressコードベース内で、多くの成功したファサードの実装を簡単に見つけることができます。ここでは、WordPress投稿のカスタムデータを保存するためのupdate_post_meta()関数を見てみましょう。 WordPressを使用すると、既存の投稿に関連付けられたカスタムフィールドを作成できます。これらのフィールドを通常の状況でどのように保存するかを考えてください。次のすべてのタスクを実装する必要があります。これは、1つのカスタムフィールドを保存するための非常に多くの作業です! WordPressは、update_post_meta()と呼ばれる組み込み関数を提供することにより、これらのフィールドを保存する複雑さを隠します ファサードとして行動する。これにより、アプリケーションに関連する必要なデータを渡すことに集中することができます。前述のタスクはすべてユーザーから隠されています。 ここで、update_post_meta()の実装を検討して、その機能をファサードとして識別します。
- フィールドデータを検証します
- HTMLタグ、スクリプト、およびSQLインジェクションのデータをフィルタリング
- データベースのフィールドの存在を確認してください
- 存在ステータスに基づいてレコードを保存または更新
必要なコードのみが表示されます。 update_metadata()関数の完全なソースコードは、wp-includesディレクトリ内のmeta.phpファイルで使用できます。ただし、ここではすべての検証、フィルタリング、およびデータベースの更新が実装されていることを確認でき、ファサードインターフェイスのみが詳細について知識を持っています。<span><span><?php </span></span><span><span>public class User </span></span><span><span>{ </span></span><span> <span>public function borrowBook() { </span></span><span> <span>$bookManager = new Book_Manager(); </span></span><span> <span>$bookManager->returnBooks(); </span></span><span> </span><span> <span>$bookPayments = new Book_Payments(); </span></span><span> <span>if ($bookPayments->hasOverdueBooks()) { </span></span><span> <span>$bookPayments->payBookFines(); </span></span><span> <span>} </span></span><span> </span><span> <span>$bookLibrary = new Book_Library(); </span></span><span> <span>$bookReservations = new Book_Reservations(); </span></span><span> </span><span> <span>$book = $bookLibrary->searchBooks(); </span></span><span> <span>$isAvailable = $bookLibrary->isBookAvailable($book); </span></span><span> <span>$isReserved = $bookReservations->isBookReserved($book); </span></span><span> <span>if ($isAvailable && !isReserved) { </span></span><span> <span>$bookLibrary->locateBook($book); </span></span><span> </span><span> <span>$bookManager->borrowBook($book); </span></span><span> <span>$bookLibrary->updateBookAvailability($book, $status); </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>}</span></span>ログイン後にコピーログイン後にコピーログイン後にコピー結論
ファサードは、ソフトウェア開発で最もシンプルで使いやすいデザインパターンの1つです。この記事を通して、ファサードパターンのさまざまな実装について説明しました。さあ、以下のコメントであなたの経験を共有しましょう。ファサードを利用するライブラリやサービスを知っていますか?出会ったファサードパターンの実用的な実装を自由に共有してください。 Fotoliaを介した画像 ファサードパターンに関するよくある質問ソフトウェアデザインのファサードパターンの主な目的は何ですか?ファサードパターンは、クラス、ライブラリ、またはフレームワークの複雑なシステムに単純化されたインターフェイスを提供する構造設計パターンです。システムの複雑さを隠し、クライアントがシステムにアクセスできるクライアントにインターフェイスを提供します。このパターンには、クライアントが必要とする単純化された方法を提供し、既存のシステムクラスのメソッドに呼び出しを委任する単一のクラスが含まれます。ファサードパターンはコードの読みやすさと使いやすさをどのように改善しますか?複雑なサブシステムにシンプルなインターフェイスを提供することにより、コードの読みや使用性を向上させます。クライアントにいくつかのサブシステムクラスを直接処理させる代わりに、ファサードは統一されたインターフェイスを使用してサブシステムをカプセル化します。これにより、サブシステムを理解するために必要な学習曲線が削減され、サブシステムの使用と管理が容易になります。ファサードパターンは、コンピューターの使用です。コンピューターをオンにすると、内部コンポーネントがどのように連携してシステムを起動する方法を理解する必要はありません。電源ボタン(ファサード)を押すだけで、複雑なプロセスが舞台裏で行われます。
ファサードパターンを使用することの利点と欠点は何ですか?
ファサードパターンの主な利点は、複雑なサブシステムへのインターフェイスを単純化し、クライアントが使いやすくすることです。また、サブシステムとそのクライアント間のデカップリングを促進し、システムをよりモジュール化し、維持しやすくすることができます。ただし、潜在的な不利な点は、ファサードにあまりにも多くの機能が置かれている場合、ファサードパターンがボトルネックになる可能性があることです。また、クライアントからサブシステムの有用な機能を非表示にすることができます。
ファサードパターンは、他の構造設計パターンとどのように異なりますか?個々のオブジェクトの動作を追加または変更するために使用されます。ファサードパターンは、複雑なクラスシステムを簡素化するために使用されます。クライアントからサブシステムの複雑さを隠している複雑なサブシステムへの単純化されたインターフェイスを提供します。他のデザインパターンと組み合わせて使用されます。たとえば、シングルトンパターンで使用して、ファサードの1つのインスタンスのみが作成されるようにすることができます。また、抽象的な工場パターンで使用して、関連するオブジェクトのファミリを作成するための単純なインターフェイスを提供することもできます。オブジェクト間の通信を制限することにより、最小の知識(またはデメテルの法則)の原則に貢献します。クライアントは、サブシステムのクラスではなく、ファサードと通信する必要があります。これにより、オブジェクト間の依存関係が削減され、システムがより堅牢で維持が容易になります。マルチスレッドアプリケーション。ただし、ファサードがスレッドセーフであることを確認するために注意する必要があります。これは、人種条件を防ぐためにロックやセマフォなどの同期メカニズムを使用することで実現できます。
ファサードパターンはパフォーマンスにどのように影響しますか?クライアントは対話する必要があります。これにより、オブジェクトの作成とメソッドの呼び出しのオーバーヘッドが減少します。ただし、ファサードがボトルネックになった場合、パフォーマンスに悪影響を与える可能性があります。複雑なサブシステムに簡素化されたインターフェイスを提供するファサードクラス。ファサードクラスは、サブシステムをカプセル化し、コールをサブシステムクラスに委任する必要があります。クライアントは、サブシステムクラスと直接ではなく、ファサードを介してサブシステムと対話する必要があります。
以上がPHPマスター|ファサードパターンで複雑さを管理しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPには4つの主要なエラータイプがあります。1。notice:わずかなものは、未定義の変数へのアクセスなど、プログラムを中断しません。 2。警告:通知よりも深刻で、ファイルを含むなど、プログラムを終了しません。 3。ファタラー:最も深刻なのは、機能を呼び出すなど、プログラムを終了します。 4。ParseError:構文エラーは、エンドタグの追加を忘れるなど、プログラムの実行を防ぎます。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

Phpoopでは、self ::は現在のクラスを指し、親::は親クラスを指し、静的::は後期静的結合に使用されます。 1.Self ::静的方法と一定の呼び出しに使用されますが、後期静的結合をサポートしていません。 2.Parent ::サブクラスには、親クラスのメソッドを呼び出すために使用され、プライベートメソッドにアクセスできません。 3.Static ::継承と多型に適した後期静的結合をサポートしますが、コードの読みやすさに影響を与える可能性があります。
