1

我有点困惑。我想构建自己的框架只是为了了解一切是如何工作的,而不是我将它用于大型项目。

我有一个 FrontController 类,这个类里面有路由功能。

  1. 设置/获取控制器参数的功能
  2. 从控制器设置/获取操作(方法)的功能
  3. 解析请求的 URI 并返回适当的控制器(如果不存在)的函数返回默认控制器,即 IndexController。
  4. Run() 方法执行以下操作:

    public function run() {
        $method    = new \ReflectionMethod($this->controller, $this->action);
        $numParams = $method->getNumberOfParameters();
    
        //fill missing parameters with null values
        if (count($this->params) != $numParams) {
           $tempArray = array_fill(0, $numParams, null);
           $this->setParams($this->params + $tempArray);
        }
    
        $controller   = new $this->controller;
    
        $userInstance = User::getInstance();
    
        //just creates a model based on the controller name by default its
        //Index.php (model)
        $model        = DB::createModel($this->getControllerName());
    
        //run _before before any function
        $controller->_before($model, $userInstance);
    
        call_user_func_array(array($controller, $this->action), $this->params);
        return;
    }
    

    现在我已经看过教程,他们使用BaseController并且每个 Controller 然后这个basecontroller扩展。我的控制器没有从 FrontController 扩展。

我的问题是我需要单独的路由类吗?我需要将 FrontController 拆分为

  1. 基本控制器
  2. 路由.php
  3. 模型.php

由于 run() 函数实际上将模型和用户对象传递给控制器​​。

4

1 回答 1

2

要记住的一个基本原则是单一职责原则。一个设计良好的类只有一个职责。

所以的。您需要将路由和所有其他职责分开。

另请注意,模型必须被视为一个层,而不是一个类或对象。模型层是类(数据访问、服务)的集合。实际上,您的User类应该被视为该层的一部分。

这是一篇可以帮助您更好地理解 MVC 模式的文章。

于 2013-05-26T22:20:45.390 回答