方法容器-流程控制编写模式 控制器编写模式 1

mvc模式里的

c 控制器 每次编写代码的 其中有一大部分高度复用的
如果把这部分代码 解耦出来 成为可以高度复用的方法 可以大大减少代码量

如果一个方法容器 有着许多的辅助方法 流程方法
而在写控制器方法的时候
就可以只要写方法流程 就可以让方法容器依次调用这些方法 这样就可以大大减少代码量 可以让控制器的代码 非常优雅

so 这当中会有许多的问题 需要解决

问题1 谁去依次调用这些方法呢

所以需要一个方法容器去一次依次调用

问题2 方法放在哪里,方法的依赖变量和输出放在哪

为什么叫方法容器,就是因为需要放置方法,和方法的依赖和输出变量,在最后一个方法结束后 把所有输出变量数据返回
容器需要用到反射,去解析方法的依赖变量 从方法的输出变量 或者mvc框架的系统容器中 得到以来依赖的类
方法依赖的变量(也就是参数) 可以靠前面的方法输出,也可以穿入 所以方法的运行顺序很重要

问题3 效率问题

暂时想到的是 可以设置 过程是否为 缓存过程 如果是缓存的过程 第二次执行 就会直接或者给出方法的输出结果

理想的控制器方法代码示例

1
2
3
4
5
6
7
8
9
reture  FunctionContainer::Pipeline([
[ 'modelGetAuthLimit',[额外的变量数组],[输出是否缓存]],
[ 'modelGetSearch'],
[ 'modelGetSort'],
[ 'modelFind'],
[ 'modelFindLoads'],
[ 'modelByAfterFind'],
[ 'retureResponse'],
]);

思考的是 这种模式到底有没有好的应用场景
灵感的来源是
我在同一个控制器的不同方法中 用了许多的重复方法 所以改成了用另外一个方法去调用重复的方法 这样代码会比较优雅
我目前在控制器中的代码并没有 完全用上上面讲的,因为上面说的我还没开始写,首先要考虑到应用场景,不能做过多的设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public function show($id,Request $request)
{
Context::set(['id'=>$id]);
$data = $this->modelPipeline([
'modelGetAuthLimit',
'modelFindById',
'modelFindLoads',
'modelByAfterFind',
]);

return responseZK(1,$data);
}

public function find(Request $request)
{
$data = $this->modelPipeline([
'modelGetAuthLimit',
'modelGetSearch',
'modelGetSort',
'modelFind',
'modelFindLoads',
'modelByAfterFind',
]);

if($data) {
return responseZK(1, $data);
}else{
return responseZK(ErrorCode::$modelCanNotFindError['code'], [],ErrorCode::$modelCanNotFindError['msg']);
}
}