ポリモーフィズムを使用して複数の結果を返し、複数の動作を同時に使用する
P粉187677012
P粉187677012 2023-09-06 00:04:47
0
1
482
<p>Laravel 9 を使用しています。次の内容を含むリクエストがあります: </p>
    <li>SEASON という名前のパラメータ、値は <code>array</code> または null にすることができます したがって、<code>SEASON</code> パラメータは <code>array</code> または <code>null</code></li> にすることができます。 <li>EXPIRY という名前のパラメータは、<code>array</code> または <code>null</code></li> のいずれかになります。 </ul> <p>2 つのクラスがあり、1 つは <code>SEASON</code> 機能用、もう 1 つは <code>EXPIRY</code> 用で、どちらも <code>Repository</code> 拡張機能に由来します。どちらにも、配列</p>を返す<code>execute</code>というメソッドがあります。 <pre class="brush:php;toolbar:false;">抽象クラス リポジトリ { 抽象パブリック関数execute():配列; } クラス Expiry はリポジトリを拡張します { パブリック関数execute() { return ['リクエストには有効期限パラメータが含まれており、季節的な動作が完了しました']; } } クラス Season はリポジトリを拡張します { パブリック関数execute() { return ['リクエストにはシーズンパラメータが含まれており、有効期限の動作が完了します']; } }</pre> <p>リクエストにSEASONが含まれる場合はSeasonクラスのexecuteメソッドを呼び出し、リクエストにExpiryが含まれる場合はexpiryのexecuteメソッドを呼び出します。または、それらを呼び出して実行結果を配列にマージし、結果を取得できるようにします。 </p> <pre class="brush:php;toolbar:false;">['リクエストには有効期限パラメータが含まれており、季節的な動作が完了しました', 'リクエストには有効期限パラメータが含まれており、有効期限の動作は完了しました']</pre> ; <p>これはコントローラーで試したものです: </p> <pre class="brush:php;toolbar:false;">パブリック関数ブートストラップ($data) { $parseTopics = Helper::parseTopicsRequest(); $basicProgram = new BasicProgramRepository(); $seasonalProgram = new SeasonalProgramRepository($parseTopics['SEASONAL']); $object = count($parseTopics['SEASONAL']) ? $seasonalProgram : $basicProgram; // ポリモーフィズム return $object->execute(); }</pre> <p>質問 1: 私のニーズを解決するために、これを使用すべきか、それとも同様のものを使用すべきかわかりません: </p> <pre class="brush:php;toolbar:false;">$employe = new Program(new BasicProgramRepository());</pre> <p>期待される結果: 期待される結果は、シーズンパラメータと有効期限があるかどうかによって異なります。私が達成したいのは、別の動作 (実行メソッド) を使用することです</p>
P粉187677012
P粉187677012

全員に返信(1)
P粉086993788

ポリモーフィックなアプローチを実装したい場合は、そのロジックを管理するためだけにリポジトリなどを作成することをお勧めします。

これは一例です。

リーリー

次のように呼び出すことができます。

リーリー

このメソッドは、パラメーターで指定された値でのみ機能します。 Season クラスと Expiry クラスの戻り結果がほぼ同じ場合は、trait で管理するのが最善です。 (つまり、コード例の $pattern)

いくつか試してみてください。

コメント読んだのでフォローしてください..

たとえば、getResult() の結果のみを取得することを好みます。 したがって、特定のパターンや多くのロジックは getResult();

に記述すべきではありません。

特性を使用する場合の例を次に示します。 まず、管理動作クラスを作成する必要があります。

behavior.php

リーリー

次に、同じレベルに Behavior ディレクトリを作成する必要があります。 このディレクトリを移動すると、このような署名ファイルが作成されます。

リーリー

findAccessibleClass() メソッドは、正しいクラスを見つける役割を果たします。

次に、このメソッドを次のように呼び出すことができます。

リーリー

getResult() 内のコードが多すぎる場合は、責任のあるコードを分離することをお勧めします。

行動特性を作成する場合、getResult は行動ロジックを担当する必要はありません。つまり、テストや修正が簡単になります。

すべてがうまくいくことを願っています。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!