关于MVC框架中 模块传参的问题

1.最近在开发的过程中注意到这样一个现象,通常对数据的CURD操作都会放到模块里面,在控制器调用并传入相应的参数即可!而这种通过形参传递参数的方式我个人是比较反感的!我在想我们能不能在模块里面接收参数在处理呢?这样模块在其他地方就可以随便调用了?而这个模块需要哪些参数自己去了解这个模块就可以了!

大多数人的写法

//模块
public function login($userName,$passWord,$validCode) {
    $param['userName'] = $userName;
    $param['passWord'] = $passWord;
    $param['validCode'] = $validCode;
    return $param;
  }
  
//控制器  
public function test(){
    $userName = $_POST['userName'];
    $passWord= $_POST['passWord'];
    $validCode= $_POST['validCode'];
    $this->login($userName,$passWord,$validCode));
}

我的写法

//模块
public function login() {
    $param['userName'] = $_POST('userName');
    $param['passWord'] = $_POST('passWord');
    $param['validCode'] = $_POST('validCode');
    return $param;
  }
  
//控制器  
public function test(){
    $this->login();
}

可是现在大多数人都是用的第一种写法!我的写法我承认在命令行运行的时候可能会有问题!但我觉得为了代码的简洁我会选择封装一个函数来让我的写法适应各种场景

阅读 3k
4 个回答

你这样写有一个很明显的问题:

如果你的模块的方法要复用,又不是用的普通的请求方式,例如我想添加一个订单,调用方法是模块的addOrder,但是后这时候我通过其他方式添加,例如excel文件上传,这时候调用模块的addOrder方法,按照你的模块方法是没法添加的,因为这些订单信息是上传时候解析时候生成的,并不是放在$_POST里面的。

每个人思考问题的角度都不相同,对于MVC的看法也不同;

下面是我个人的观点:


Controller相当于一个工厂的调度科,接收来自Boss的指令(参数),再根据指令调度Model或View;

如果涉及业务逻辑,为了避免Controller肥大;调度者就需要一个助理,这个助理就是Service,既然有了这个助理,那么Controller何不把任务下发给Service,在Service中合理拆分任务;

除了Controller可以找助理,MVC中各组件都可以使用助理来辅助其完成任务;

用户即Boss--访问-->Route--参数-->Controller--下达指令-->Service......

当程序需要异步执行的时候,这种方式显然不妥。

参数的传递有很多种形式,这样写不是不可以,只是复用性降低了,特别是功能多了就会使代码变得臃肿

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题