php写法问题

我想问下大家代码平时是怎么拆分的。
比如一个表单,传递给控制器,控制器执行保存、修改,表单需要进行逻辑判断。
一般大家是怎么拆分的。
以下是我知道的几个方法:
1.全部写控制器,一条线写完;
2.一个控制器调用一个model方法,model调用多个其它方法得到最后结果,最终返回给控制器
3.一个控制器根据业务流程,一个步骤调用一次model方法,最终完成。
那种方法合适

阅读 2.4k
3 个回答

举个例子,具体的业务逻辑肯定更复杂;

class Response {
    public static function send($data) {
        echo json_encode($data);
    }
}
class Request {
    public static function post($key = null) {
        return isset($_POST[$key]) ? $_POST[$key] : $_POST;
    }
}
class Controller {
    public function create() {
        $data = Request::post();
        $result = (new Model())->create($data);
        Response::send($request);
    }
}
class Model {
    public function create($data) {
        // 开启事务
        try {
            (new CommentModel())->create($data['member_id'],$data['content']); // 保存评论
            (new IntegralModel())->update($data['member_id'],5); // 更新积分
            // 提交事务
        } catch(Exception $e) {
            // 事务回滚
        }
       
    }
}
class CommentModel {
    public function create($member_id,$content) {
        throw new Exception('保存失败');
    }
}
class IntegralModel {
    public function update($member_id,$integral) {}
}

主要想表达一个什么意思呢?程序逻辑尽量清晰,每个方法该干什么就尽量把职责进行区分,不要放到一起,代码又长又臭。

而且,不同的业务逻辑还会运用到设计模式。

所以,这就是为什么大家现在用的框架不仅仅只是个MVC了,慢慢的使用了cache层,service层,依赖注入等等理念来解决问题,JS的趋势也从MVC走向了MVVM。

MVC的整体设计方案。我个人在实际开发的过程中是在controller和model层之间增加了一个service层,主要做业务逻辑代码。

1.在controller写model的操作绝对是不合适的。
2.model封装一些简单的数据操作。
3.在service写业务逻辑代码,controller层调用service,service层的代码复用率就会变高。
4.整体解耦,有利于代码的整洁和维护。
5.model层可以做一些数据表相关的其他封装。

当然你可以有其他的结构思路,这边我只是提供了自己的理解。

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