我使用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
的数量很可怕。但这是它的商业逻辑。
也许您可以给我一个想法,我可以通过哪种方式重新组织我的代码以使其更清晰?
答案 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