我怎样才能重构我的代码(laravel,OOP)

时间:2016-11-29 11:18:06

标签: php laravel oop

我使用laravel完成了一些小应用程序,它有效,但我有一些意大利面条代码。我想请你帮忙。我有一些关于代码模式的理论,但我不知道如何在我的情况下实现它们。

最奇怪的部分:我有输入数据应该逐步分析,需要采取一些措施。例如,我有一个输入数组参数

$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的数量很可怕。但这是它的商业逻辑。

也许您可以给我一个想法,我可以通过哪种方式重新组织我的代码以使其更清晰?

1 个答案:

答案 0 :(得分: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