0

PHP コードに例外処理を追加しています。例外処理を行う疎なブロックが大量に発生し、それらの膨大な量によって、実行されている実際の製品コードが隠されているようです。例えば:

function loadProduct($id)
{
    $product = new ProductRecord();

    try 
    {
        $data = $product->loadFromDatabase($id);
    }
    catch (\BadFunctionCallException $e)
    {
        $error = true;
    }        

    return $data;
}

上記の関数の実際のペイロードは、$data を返すことです。例外処理がなければ、2 行の関数になる可能性があります。

function loadProduct($id)
{
    $product = new ProductRecord();
    return $product->loadFromDatabase($id);
}

これを隠す 1 つの方法はFactory Method、次のように を使用することです。

function loadProduct($id)
{
    $product = new ProductRecord();
    $factory = new ProductFactory($product);
    return $factory->loadProduct($id);  //inside loadProduct I can put try/catch block
}

ここでは、まったく新しい (ファクトリ) クラスと別のコード行を関数に追加して、例外処理を非表示にしています。適切な注意を払えば、これは機能し、見栄えも良いと思います (つまり、コンストラクター内でファクトリを初期化できるため、関数レベルのコードの外に移動できるため、良いオプションになる可能性があります)。しかし、それは最高ですか?

つまり、私の質問は、実際のペイロードをまばらな try/catch ブロックに埋めずに、コードで例外処理を使用するにはどうすればよいかということです。

4

2 に答える 2

0

1 つの方法は AOP である可能性があり、別の方法は IOC とカーネルを StackPHP のようなミドルウェアのように使用し、別のミドルウェア レイヤーとして例外処理を行うことです。もちろん、制御フローに例外を使用している場合は、リクエスト応答レベル全体でない限り、それを行うことはできません。

于 2014-04-22T12:14:00.557 に答える