ホームページ  >  記事  >  バックエンド開発  >  PHP クロージャ原則 (OCP) のユースケース分析

PHP クロージャ原則 (OCP) のユースケース分析

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-17 10:54:262719ブラウズ

今回は、PHP Closure Principle (OCP) のユースケースの分析をお届けします。PHP Closure Principle (OCP) を使用する際の 注意事項は何ですか? 以下に実際のケースを見てみましょう。

1. 「オープン-クローズド」とは何ですか

ソフトウェア システムの規模が増大し続けるにつれて、ソフトウェア システムの保守と変更の複雑さは増大し続けています。このジレンマは、フランスの工学学者ベルトラン マイヤーによって説明されました。 1998 年 「オープンクローズ原則 (OCP)」原則は 2016 年に提案されました。この原則の基本的な考え方は次のとおりです:

オープン (拡張のためにオープン) モジュールの動作は、厳格ではなくオープンであり、拡張をサポートする必要があります。

Close (変更のためクローズ) モジュールの機能を拡張する場合、既存のモジュールに大規模な影響を与えたり、影響を与えたりしてはなりません。

言い換えれば、開発者は、システム内の既存のコード(ソースコードまたはバイナリコード)を変更することなく、アプリケーションシステムのソフトウェア機能を拡張する必要があります。一言でまとめると、モジュールは拡張性の観点から開発され、変更可能性の観点から閉じられるべきです。

人生で考える最も簡単な例はコンピューターです。インターフェースを介してさまざまなデバイスを接続するだけで、コンピューターの機能を簡単に拡張できます。

オープン/クローズによりシステムの拡張性と保守性が向上しますが、これも相対的なものであり、メンテナンスの困難を軽減するために一部の機器と機能を安定した状態に保つ必要があります。新しい機能を実装するには、ハードウェアをアップグレードするか、より高性能なコンピューターに変更する必要があります。コンピューターの

マルチメディアプレーヤー ソフトウェアを例に挙げると、プレーヤーとしては、マルチメディア ファイルを開く、再生の停止、早送り、音量調整など、いくつかの基本的かつ汎用的な機能が必要です。しかし、どのようなプレーヤーであっても、どのような再生プラットフォームであっても、この原則に従って設計されたプレーヤーは、統一されたスタイルと操作習慣を持っている必要があり、どのプレーヤーを使用しても、作成者はすぐに使い始めることができるはずです。

プレーヤーを例として、まず抽象インターフェイスを定義します。コードは次のとおりです。

interface process
{
  public function process();
}

次に、以下に示すように、このインターフェースを拡張してデコードおよび出力機能を実装します

class playerencode implements process
{
  public function process()
  {
    echo "encode",PHP_EOL;
  }
}
class playeroutput implements process
{
  public function process()
  {
    echo "ouput",PHP_EOL;
  }
}

プレーヤーのさまざまな機能については、規約に従ってプロセスインターフェースを実装する限り、ここで公開されています。新しい機能モジュールをサーバーに追加します。ここではデコードおよび出力モジュールのみが実装されており、必要に応じてさらに新しいモジュールを追加できます。

次に、プレーヤーのスレッド高スケジューリング マネージャーを定義します。プレーヤーが通知を受信すると (外部クリック動作または内部通知動作の場合があります)、実際のスレッド処理をコールバックします。コードは次のとおりです

class playProcess
{
  private $message = null;
  public function construct() {}
  public function callback(event $event)
  {
    $this->message = $event->click();
    if($this->message instanceof process)
    {
      $this->message->process();
    }
  }
}

。プロダクトが出てきました。ここでMP4クラスを定義します。このクラスは、以下のようにイベント処理ロジックを定義します。最後は、イベントのソートと処理を担当するクラスです。イベントを判断して、プレーヤーの組み込み純血種マネージャーによるスケジュール用の正しい「スレッド」を生成します。 コードは次のとおりです

class mp4
{
  public function work()
  {
    $playProcess = new playProcess();
    $playProcess->callback(new event('encode'));
    $playProcess->callback(new event('output'));
  }
}

実行される最後のコードは次のとおりです。

エンコード出力

2. オープンクローズの原則を遵守する方法

抽象化は比較的安定しているため、オープンクローズを実現するための核心は、具体的ではなく抽象的にプログラムすることです。クラスを固定抽象化に依存させることで、そのような変更は閉じられ、オブジェクト指向の継承とポリモーフィックなメカニズムを通じて、抽象本体を継承し、そのメソッドを上書きすることで固有の動作を変更し、新しい拡張メソッドを実装することができます。したがって、拡張のためにオープンされています。

1) 「抽象化」と「カプセル化」のアイデアをデザインに適用します。

一方では、ソフトウェアシステム内で考えられるさまざまな「変動要因」を見つけて、それらをカプセル化することです。

一方、可変要素は複数の異なるコードモジュールに分散すべきではなく、オブジェクトにカプセル化される必要があります。

2) システム関数プログラミングの実装にインターフェイス指向プログラミングを適用します。

要件が変更された場合、変更に適応するためにこのインターフェースの新しい実装クラスを提供できます。

インターフェイス指向プログラミングでは、インターフェイスを実装する関数クラスと、インターフェイス型として宣言されるオブジェクトが必要です。 デザインモードでは、デコレーションモードは明らかにOCPを使用しています。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

PHP Richter 置換ケースの詳細な説明

Bootstrap+PHP のマルチイメージアップロード実装手順の詳細な説明

以上がPHP クロージャ原則 (OCP) のユースケース分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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