MVC模式:首先需要创建什么?

时间:2012-02-12 15:25:47

标签: php model-view-controller codeigniter testing

我正在研究CodeIgniter及其软件模式。应首先创建哪个视图或控制器?

8 个答案:

答案 0 :(得分:14)

模型,因为那是您的应用程序。 Controller和View仅构成Model的一个接口。可以说,控制器是你家的大门。你先建造什么?门还是房子?是的,所以首先构建模型。然后添加一个接口。

答案 1 :(得分:7)

我总是从View 开始。方案是,我已经设计了我的数据库,选择了技术。这是我在MVC模式上的工作流程。

  1. 使用CSS /图像等创建html模板。
  2. 根据视图中显示的数据,我创建了控制器方法。
  3. 我在控制器方法中放置了虚拟数据,这样我就可以看到一个动态页面,可以正确地操作视图。
  4. 根据我的控制器需要的数据,我创建了Model方法。
  5. 在这个过程中,我从不创建任何额外的方法或代码块。它可以防止添加我们通常认为可能需要的代码"。但它们永远不需要。

    通过这种方式,您首先要创建规范,然后在每个步骤上实现它。就像它一样,View为它创建了数据需求。控制器提供它。并为Model创建数据规范。最后,Model只提供那些被调用或需要的数据。

答案 2 :(得分:1)

控制器是必须的。因为没有控制器就无法执行/完成工作。所以控制器首先是因为跟随,

  1. 您可以在必要时禁用视图
  2. 您可以通过控制器
  3. 将相关变量设置到视图中
  4. 与模型的交互由控制器完成,因此当您需要数据时,控制器首先出现
  5. 您可以将用户重定向到其他控制器
  6. 您可以根据请求显示其他视图。对于计算机查看A,对于移动设备查看B,如同明智的
  7. 查看是演示文稿,因此首先需要提供数据。

答案 3 :(得分:1)

虽然这个问题已经有了可接受的答案,但我想从可测试性的角度提供一种方法。现成的框架经常并没有考虑到可测试性设计他们的控制器,所以这种问题反复出现。

编写良好的 可测试的 控制器应该将视图视为通过控制器的__construct方法注入的依赖项。但我不知道CodeIgniter控制器是否允许此功能。

在MVC范例中,Controller“汇集”View和Model的元素,因此,与任何行为依赖一样,如果这些对象提供除“哑”数据存储之外的任何功能,则应将它们注入到控制器中实例化的时间,以便它们可以被模拟用于测试目的。所以你会做类似以下的事情:

$view  = new SmartyView;
$model = new UserModel;
$controller = new LoginController($view, $model);

通常,模型不提供任何公共“行为”方法,并充当基本数据存储实体。如果是这种情况,出于同样的原因,您不需要将数组数据结构注入控制器以创建新数组,您可以安全地在控制器中创建新的模型实例,而不会牺牲可测试性:

class LoginController
{
  protected $view;

  public function __construct(ViewInterface $view)
  {
    $this->view = $view;
  }
  public function doLogin($user, $pass)
  {
    $userModel = new UserModel();
    // do stuff with model to determine if user/pass was valid
  }
}

$view  = new SmartyView;
$controller = new LoginController($view);

为了测试性,最佳做法是避免将控制器与视图和模型紧密耦合。这就是您通常应该避免在控制器代码中使用new关键字的原因。您的控制器 - 以及任何其他对象 - 应该 ASK 表示其依赖关系,而不是 LOOK 。这将导致更透明的API,更可测试的代码,更少的调试麻烦和更快乐。

答案 4 :(得分:0)

控制器,您需要它在模型和视图之间进行通信。 没有控制器,模型就无法与视图交互。

答案 5 :(得分:0)

您应该在调用View时开始使用Controller。

在这里,您可以看到Controller介于模型和视图之间。 http://codeigniter.com/user_guide/overview/mvc.html

答案 6 :(得分:0)

我会说模型和控制器携手共进。

没有型号,你怎么知道控制器中的流量是什么?

如果没有控制器,您如何知道模型中需要哪些方法?

有时,模型会获得优先级,有时会根据情况控制器。

答案 7 :(得分:0)

我知道这可能是一个老问题,但我现在碰到了它。
其他人可能会在以后需要它。所以我决定总结一下。
我认为你的方法取决于具体情况。
让你的操作顺序为模型 - 视图 - 控制器
让我们称之为 自下而上 方法。案件和推理由@Gordon here提供。
当你开始使用UI时,另一种情况可以称之为 从上到下 。案件和理由由@ shiplu.mokadd.im here提供。
评估您自己的案例并选择其中一个案例。祝你好运!