基本的には、
変数を開始する->while
ループ->結果をデータベースに保存する関数があります。
しかし、プロジェクトのさまざまな部分でこの関数を使用しているため、柔軟性を持たせるために、各ステップにコールバック関数を追加する必要がありました。
私の現在の実装は次のようになります。
function doStuff(arg1, arg2, $callbacks = array())
{
//Init vars
$var1 = ...
$var2 = ...
$callbacks['onStart']();//callback..
//Loop:
while(....)
{
$callbacks['afterCycle']; //callback after each loop.
}
//Database storage.
$this->store($data);
$callbacks['onEnd'](); //callback...
}
しかし、この関数の現在の実装は私にとって満足のいくものではありません。コードを維持するのは簡単ではないと思います。別の同様の関数 (init->loop->storage) を作成したい場合は、同じことを繰り返します。たとえば、現在のループ後のコールバック関数は「afterCycle」と呼ばれますが、別の関数では「afterLoop」と呼ばれる可能性があり、コードに一貫性がなく、理解しにくくなります。
これに関する私の現在の考えは、これらのコールバック関数を事前定義されたパブリック フィールドに格納するクラスを作成することです。そのため、名前は変更できません。また、関数doStuff
はそのコールバック クラスのオブジェクトを渡すことを強制します。この新しい実装が適切かどうかはまだわかりません。そのため、ここで質問しています。
私が考えている新しい実装は次のようになります。
function doStuff(arg1, arg2, Callback $callbacks)
{
//Init vars
$var1 = ...
$var2 = ...
$callbacks->onStart();//callback..
//Loop:
while(....)
{
$callbacks->afterCycle(); //callback after each loop.
}
//Database storage.
$this->store($data);
$callbacks->onEnd(); //callback...
}