2016-11-29 6 views
0

laravelを使って小さなアプリを完成しましたが、動作しますが、スパゲッティコードがあります。私はあなたの助けを求めたいと思います。私はコードパターンに関するいくつかの理論を持っていますが、私の場合はそれらを実装する方法がわかりません。私のコード(laravel、OOP)をリファクタリングするには

最も奇妙な部分:私は入力データを段階的に分析する必要があり、いくつかのアクションを取る必要があります。たとえば、私は、パラメータ

$array = ['param1','param2','param3', ..., 'paramN'] 

と入力配列を持っている私はPARAM1からparamNのにそれを分析し、いくつかのアクションを実行する必要があります。コード構造は次のようになります。

if($array['param1'] == 'X') { 
    some action 
} else { return ....} 

if($array['param2'] == 'Y') { 
    some action 
} else { 
    if($array['param3'] == 'Z') { 
     return .... 
    } else { return ....} 
} 

このコードはifブロックでいくつかのファサード、検証を使用しますが、if Sの数がひどいです含まれています。しかしそれはビジネスロジックです。

多分、私のコードをどのように再編成してより明確にすることができるか、私には分かりますか?あなたは非常に良い読み取り可能なコードで上記のコードを、あなたのロジックをリファクタリングするコレクションを使用することができます

答えて

1

$array = ['param1','param2','param3', ..., 'paramN']; 
$collection = collect($array); 

の下のように見えることができ、今あなたが取得できれば、コールバック

$param1Callback = function($value) { 
    // $value will be value of param1 which is X in your comparision so write your if logic here 
    if($value == 'x') { 
     // process here 
     return true; 
    } 
    return false; 
} 
$callbacks = ['param1' => $param1Callback, 'param2' => $param2Callback ...]; 

$collection->each(function($value, $key) use($callbacks){ 
    if($callbacks[$key]($value)) { 
     // here param1 value is processed with 'X' and that callback returned true 
    } 
... and so on 
}); 

として、あなたの処理を定義しますここで考えられるのは、利用可能なコレクションの方法に関する完全な文書です。 https://laravel.com/docs/5.3/collections#available-methods

+0

すばやくご回答いただきありがとうございます。 trueまたはfalseを返す必要がある場合、このロジックは有効です。しかし、時にはメッセージを表示してユーザーに返す必要があります。いくつかのパラメータの処理は、他のいくつかのパラメータを処理する以前の結果に依存します。私はこのアプローチが私にはふさわしくないと思います。または私は間違っていますか? –

+0

コレクションの理解を深めるためには、アダムのコースを見てもコレクションには向いていて、あらゆる種類の要件に適合します。 https://adamwathan.me/refactoring-to-collections/ –

+0

よろしくお願い致します。 –

関連する問題