laravelのキューを扱うときに問題があります。私はアーキテクチャのスケーリングに取り組んでいるので、私がやることのほとんどはキューやジョブを使って実装されています。たとえば、大きなファイルを処理する場合、ファイル内の1000行ごとにジョブが作成され、結果が出力ファイルに保存されます。Laravel実行前と実行後にジョブクラスのメソッドを呼び出す方法
私は現在、ジョブの親として使用している「プロセス」クラスを持っています。プロセスクラスには、job()メソッドが呼び出された後、メソッドが実行された後に呼び出されるstart()およびend()メソッドがあります。現在の解決策は、handleメソッドからこれらのメソッドを呼び出すことですが、この解決策はジョブクラス自体で不必要なコードを増加させ、これらのメソッドを呼び出すことを念頭に置く実装者の責任です。
public function handle()
{
$this->start(); // <- implementer has to remember to call this
// Do the actual handle functionality
$this->end(); // <- and this
}
私は仕事(子)クラスからの親メソッド呼び出しを必要としない "クリーン"な方法があるのだろうかと思いましたか? queue eventsを使用しようとしましたが、指定されたイベントオブジェクトからジョブクラスを構築できません。 Dispatching an eventは、それぞれのジョブクラスにこれら2つの余分な行を追加する必要があるため、実際には役に立ちません。
私は魔法の__call()メソッドも調べましたが、これは "handle"メソッドが存在しない場合にのみ機能します。これはartisan make:jobコマンドデフォルトでメソッドを生成します(実装者がそれを削除するのに十分な知識を必要とします)。
これについてはっきりするように、現在の解決策は実際には機能しますが、それぞれのクラスごとに同じ行を複製するようなコードの臭いのようです。
ニースとシンプル。私は無意識のうちにすべての子クラスのhandleメソッドで終わるすべてのジョブを生成するためにartisanコマンドを使用したいと思った後、何か似たようなことを無視しました。私はそれがきれいであるときmake:jobなしで子のジョブを書いたり生成したりするのはあまりにも多くの努力ではないと確信しています。あなたのソリューションを "一つ"上げるには、私は親を抽象クラスにし、 "プロセス"を抽象関数にして、それが子によって宣言されていることを確認することを個人的にお勧めします。 – Nonetallt