函数太大了,能否根据不同的参数走不同的 controller

现有一个函数已经臃肿到近300行了,期间各种if else套娃。
这个函数属于历史遗留,大概的功能是:需要根据一些词汇做搜索干预,设计之初估计干预类型不多。但是随着干预类型的新增,函数内充斥着各种if else,各种字段判断,阅读十分不友好,有什么办法在前端不改接口的前提下,能根据不同的action值将功能拆到各个controller中。
不一定是controller或有其它更好的办法望不吝赐教

不方便上代码随便举几个例子

  • 很多和当前操作无关的参数
    $a = $request->input('a')//功能a
    $b = $request->input('b')//功能b
    ...
    #这里可能 a和b就属于不同的功能块需要的参数
    #接受后,下边还要做判端,至少是一个 if/else
  • 入库的数据,该项功能下需要拼接别的串
  • 处理完一部分共同功能后,该功能还有其它操作
    -等等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

试试策略模式,或者想办法嵌套设计模式。

5年前 评论
讨论数量: 8

试试策略模式,或者想办法嵌套设计模式。

5年前 评论
  1. 拆成多个路由,适用于 /deleteUser => /user/delete 这种设计不合理且具备层级关系的情况,为了避免前端改接口可以中间件做一层兼容。
  2. 不要把代码全部堆在 Controller 里。合理地拆成 Helper、Job、Model 等。
5年前 评论
crhhoho (楼主) 5年前
颠倒的玉石

300行嘞,我觉得不影响大的话。还是先别动了,改错了怎么办 :sob: :see_no_evil:

5年前 评论

300 行嘞,我觉得不影响大的话。还是先别动了,改错了怎么办 :sob:

5年前 评论

我觉得可以使用反射加入多态的方式,多个的功能都实现一个接口,接口中有一个处理你干预类型的接口,然后用特有的一些类来实现接口,比如干预类型a是一个类,干预类型b也是一个类,然后通过一个类将干预类型a和干预类型b给管理起来,只需要调用这个类,让这个类通过反射的方式找到下面的干预类型a或b,然后进行处理,

5年前 评论

可以采用可变函数的方法,在当前文件下新建需要实现的方法,或者用多态,然后use引用

$func = $request->input('a');
$this->$func($params)
.....
public function a($params)
5年前 评论

你让我又想起来第一次 review 到一个 2298 行 function 的恐惧。

5年前 评论
zdg1992 5年前

$a = $request->input('a')//功能a
$b = $request->input('b')//功能b
new $a(); //获取的a 不同得到不同类。 定位到不同的方法去处理。 类会自动加载。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!