目次
モード構造" >モード構造
パターン分析
欠点
パターン拡張
概要
ホームページ PHPフレームワーク Laravel Laravelフレームワークにおける出現パターンの詳細な分析

Laravelフレームワークにおける出現パターンの詳細な分析

Jul 31, 2018 pm 03:13 PM
laravel php 外観モード

laravel フレームワークのファサード パターン (Facade Pattern) は、サブシステム内の一連のインターフェイスに一貫したインターフェイスを提供するために、サブシステムとの外部通信が統合されたファサード オブジェクトを通じて実行される必要があるというものです。 -level インターフェイス。このインターフェイスにより、このサブシステムが使いやすくなります。アピアランスモードはファサードモードとも呼ばれ、オブジェクト構造モードです。

Laravel で一般的に使用されるものRouteRedisAuthこれらのファサードは、Laravel で複数の外観クラスが設計され、統一された抽象外観クラスから継承されます。その背後にあるサブシステムにアクセスするための基本的な方法。

新しいビジネス ニーズの場合は、元の外観クラスを変更するのではなく、新しい特定の外観クラスを追加します。同時に、新しい特定の外観クラスは、新しいサブシステム オブジェクトに関連付けられます。そして、外観クラスの目的を置き換えます。

以下は、抽象外観クラスを導入していない単純な外観パターンの例です。Laravel Facade を紹介する記事では、必要に応じて新しいサブシステムを簡単に追加できるように、Laravel が抽象外観クラスを提供していることがわかります。外観クラスを追加し、外観クラスが対応するサブシステム (またはサービス) に正しくプロキシできるようにします。

モード構造

外観モードには次のロールが含まれています:

  • ファサード外観ロール

  • SubSystem サブシステムロール

Laravelフレームワークにおける出現パターンの詳細な分析

コード例

<?php class Client
{
    public function main()
    {
        (new Facade)->operation();
    }
}

class Facade
{
    private $systemA;
    private $systemB;
    
    public function __construct()
    {
        $this->systemA = new SystemA;
        $this->systemB = new SystemB;
    }
    
    public function operation()
    {
        $this->systemA->operationA();
        $this->systemB->operationB();
    }
}

class SystemA
{
    public function operationA()
    {
        //
    }
}

class SystemB
{
    public function operationB()
    {
        //
    }
}
ログイン後にコピー

パターン分析

「単一責任原則」によれば、ソフトウェアでシステムを複数のサブシステムに分割することは、システム全体の複雑さを軽減するのに役立ちます。共通の設計目標は、サブシステム間の通信と相互依存を最小限に抑えることであり、この目標を達成する 1 つの方法があります。ファサード オブジェクトを導入します。これは、サブシステムにアクセスするためのシンプルで単一のエントリ ポイントを提供します。・外観モードも「デメテルの法則」を体現したもの 新しい外観クラスを導入することで、元のシステムの複雑さを軽減し、クライアントクラスとサブシステムクラスの結合を軽減することができます。 - 外観パターンでは、サブシステムの外部とその内部の間の通信が、統一された外観オブジェクトを通じて実行されることが必要です。外観クラスは、クライアントをサブシステムの内部の複雑さから分離するため、クライアントは外観のみを処理する必要があります。 object without サブシステム内の多くのオブジェクトを操作します。 - アピアランス モードの目的は、システムの複雑さを軽減することです。 - アピアランス モードはクライアントの使用の利便性を大幅に向上させるため、クライアントはサブシステムの動作の詳細を気にする必要がなく、アピアランス ロールを通じて関連する機能を呼び出すことができます。

欠点

外観モードの欠点

  • は、顧客のサブシステム クラスの使用を十分に制限できません。顧客のサブシステム クラスへのアクセスに制限がかかりすぎると、多様性と柔軟性が低下します。

  • 抽象外観クラスを導入しない場合、新しいサブシステムを追加するには、外観クラスまたはクライアントのソース コードの変更が必要になる可能性があり、これは「オープン-クローズ原則」に違反します。

パターン拡張

  • システムには複数の外観クラスがあります

    外観パターンでは、通常、必要な外観クラスは 1 つだけであり、この外観クラスはインスタンスを 1 つだけ持ちます。つまり、シングルトン クラスです。多くの場合、システム リソースを節約するために、外観クラスは一般にシングルトン クラスとして設計されます。もちろん、これは、システム全体で 1 つの外観クラスしか存在できないという意味ではありません。システム内で複数の外観クラスを設計し、特定のサブシステムと対話し、対応するビジネス機能をユーザーに提供することができます。

  • 外観クラスを介してサブシステムに新しい動作を追加しようとしないでください。

    外観クラスを継承してサブシステムに新しい動作を追加しないでください。このアプローチは間違っています。出現パターンの目的は、サブシステムに新しい動作を追加することではなく、サブシステムに集中化された簡素化された通信チャネルを提供することです。新しい動作の追加は、元のサブシステム クラスを変更するか、新しいサブシステム クラスを追加することによって実現する必要があります。外観クラスを通じて実装されます。

  • 抽象外観クラスの導入

    外観モードの最大の欠点は、新しいサブシステムを追加したり、サブシステムを削除したりするときに、外観クラスを変更する必要があることです。特定の時点での外観クラス この問題をある程度解決するために、クライアントは抽象的な外観クラスをプログラムします。新しいビジネス ニーズの場合、元の外観クラスは変更されませんが、新しい特定の外観クラスが新しいサブシステム オブジェクトに関連付けられ、同時に、次の目的を達成するために構成ファイルが変更されます。ソースコードを変更せず、Appearance クラスの目的を置き換えます。

概要

  • 外観パターンでは、サブシステム内の一連のインターフェイスに一貫したインターフェイスを提供するために、サブシステムとの外部通信を統合された外観オブジェクトを通じて実行する必要があります。 、このインターフェイスにより、このサブシステムが使いやすくなります。アピアランスモードはファサードモードとも呼ばれ、オブジェクト構造モードです。

  • 外観モードには 2 つのロールが含まれています。外観ロールは、クライアントで直接呼び出されるロールであり、関連する (1 つ以上の) サブシステムの機能と責任を知ることができます。クライアントから送信されたすべての機能を処理します。受信リクエストは対応するサブシステムに委任され、処理のために対応するサブシステム オブジェクトに渡されます。ソフトウェア システムには同時に 1 つ以上のサブシステムの役割が存在する可能性があります。別のクラスですが、サブシステムの機能を実装するクラスです。

  • 外観パターンでは、サブシステムの外部とその内部の間の通信が統一された外観オブジェクトを通じて実行される必要があるため、外観クラスはクライアントをサブシステムの内部の複雑さから分離するため、クライアントは処理するだけで済みます。外観オブジェクトを使用すると、サブシステム内の多くのオブジェクトを処理する必要がなくなります。

  • アピアランス モードの主な利点は、サブシステム コンポーネントを顧客から保護し、顧客が処理するオブジェクトの数を減らし、サブシステムを使いやすくすることで、サブシステムと顧客の間の疎結合関係を実現し、大規模なコスト ソフトウェア システムのコンパイル依存性により、異なるプラットフォーム間でのシステムの移植プロセスが簡素化されます。その欠点は、顧客によるサブシステム クラスの使用を十分に制限できず、抽象的な外観を導入せずに新しいサブシステムを追加できることです。クラスの外観クラスまたはクライアントのソース コードを変更する必要がある場合がありますが、これは「オープン-クローズ原則」に違反します。

  • 出現パターンに該当する状況としては、複雑なサブシステムに単純なインターフェイスを提供する場合、階層構造においてクライアント プログラムと複数のサブシステムの間に大きな依存関係がある場合、各層の機能を定義する必要がある場合などがあります。システム 入口は層間の直接接触を防ぎます。

上記がこの記事の全内容です。詳細については、Laravel Framework Getting Started Tutorialを参照してください。

おすすめ関連記事:

laravel5.2ベースのミドルウェアソースコードの解析

Laravelローカル環境構築: Homestead開発環境のデプロイ

おすすめ関連コース:

2017年Laravel最新5本お勧めのビデオチュートリアル

以上がLaravelフレームワークにおける出現パターンの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

Laravelで電子メールの送信が失敗したときに返品コードを取得する方法は? Laravelで電子メールの送信が失敗したときに返品コードを取得する方法は? Apr 01, 2025 pm 02:45 PM

Laravelの電子メールの送信が失敗したときに戻りコードを取得する方法。 Laravelを使用してアプリケーションを開発する場合、検証コードを送信する必要がある状況に遭遇することがよくあります。そして実際には...

See all articles