【问题标题】:Can a Controller have database queries (MySQL)? If yes, when?控制器可以进行数据库查询(MySQL)吗?如果是,什么时候?
【发布时间】:2011-11-09 01:25:09
【问题描述】:

我正在阅读很多关于 MVC 的教程,所以我的问题是,一个完美的 PHP MVC 框架可以在 Controller 中进行数据库查询吗?据我了解,最舒服的方法是将所有数据库查询放在 Model 中,对吧?如果我有 POST 或 smth,我只需将该 POST 传递给 Model,它就会进行所有插入等操作?

或者我错过了什么?而如果Controller可以有数据库查询,会是什么情况呢?

【问题讨论】:

    标签: php mysql oop model-view-controller frameworks


    【解决方案1】:

    任何控制器都可能没有任何与数据库相关的代码 - 任何数据库查询都可以存储在 MVC 架构中的模型中 - 控制器只能与模型一起使用,但不能直接与数据库一起使用

    编辑:大多数框架都允许直接从 Controller 调用 SQL - 但它不是 MVC,而是一堆对象

    【讨论】:

    • 那么视图呢?我的观点应该有吗? u___u x_x 我没有发现任何问题。
    • 不,不应该,View 所需的任何数据都必须在控制器中准备好。我使用的唯一替代方法是辅助函数,但这不是干净的 MVC。
    【解决方案2】:

    任何控制器不得理想地和概念地包含任何数据库查询。如果您在控制器本身中有一些查询,那么它将带走 MVC 架构的一些关键优势,例如代码隔离等。

    理想情况下, 模型类 (M) 必须包含 DB 查询以及通过 DB 对象与 DB 的任何交互。模型理想地表示数据库中的表或用于 io 的文件

    视图 (V) 必须包含很少 PHP 的 HTML。在大多数情况下,只使用循环和条件语句

    控制器类 (C) 必须包含应用程序的所有业务逻辑、错误处理程序等。

    维护 MVC 架构对于维护、调试和代码理解方面的新开发人员前景非常有用。如上所述,规范带来了很多好处。

    【讨论】:

    • 我同意不同意。控制器应该仅用于控制应用程序的流程。错误处理和业务逻辑应该包含在您的模型中。我想知道模型可以 100% 独立。他们处理自己的验证、逻辑和错误处理。我想我们都有不同的意见。
    【解决方案3】:

    从技术上讲 - 是的,这是可能的。但这会破坏 MVC 背后的整个想法。

    【讨论】:

    • 那么,为什么 CodeIgniter 允许这样做?
    • @OZ_ :大声笑,说实话:D
    • 好吧,有些人可能会认为它很蹩脚,但我相信这只是为了让某些应用程序在需要时变得更简单。这是 CodeIgniter 相对于其他框架的一大优势——如何构建你的应用程序取决于你,如果你只有 2 个 SQL 查询——为什么要编写模型?再次 - 这打破了 MVC 模型,但它可能很有用。
    • 如果你现在做更简单的应用程序,你将节省四分之一的时间,当你将来修改这个应用程序时,这个 nonMVC-s 将花费你比你节省更多的时间
    • 没错,但我不是在谈论处理大量数据的应用程序,而是只需要执行 2 或 3 个查询的应用程序 - 为什么我要编写一个只包含一种方法的模型?如果您需要扩展它 - 您可以随时将查询复制粘贴到新创建的模型中并替换它。
    【解决方案4】:

    在我的软件中,我可以从模型中提取查询对象并从控制器内部执行它们:

    $model->dsql()->where('age>',20)->do_delete();
    

    从技术上讲 - 是的,控制器可以执行查询,但它必须依赖模型来构建查询。

    【讨论】:

      猜你喜欢
      • 2013-07-29
      • 2021-08-08
      • 1970-01-01
      • 2017-08-30
      • 2011-09-12
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多