gpt4 book ai didi

PHP MVC 和 SQL 减模型

转载 作者:行者123 更新时间:2023-12-04 07:04:31 25 4
gpt4 key购买 nike

我一直在阅读有关 MVC 的几篇文章,并有一些问题希望有人可以帮助我回答。

首先如果 型号 是数据的表示形式和操作该数据的手段,那么使用通用接口(interface)具有一定抽象级别的数据访问对象 (DAO) 应该足以完成大多数任务,不是吗?

为了进一步阐述这一点,假设我的大部分开发都是使用 MySQL 作为数据的底层存储机制完成的,如果我在构建 SQL 语句时避免使用供应商特定的函数(即 UNIX_TIMESTAMP)并使用抽象具有在 MySQL 和 PostgreSQL 或 MySQL 和 SQLite 之间移动的公共(public)接口(interface)的 DB 对象应该是一个简单的过程。

这是我在某些任务中得到的,由单个 处理 Controller --(即 UserRegistration)而不是创建 型号 对于该任务,我可以获得 db 对象的实例——(即 DB::getInstance())——然后进行必要的 db 调用以插入新用户。为什么我要创建一个新的 这么简单的任务型号 ?

在一些示例中,我看到了 型号 已创建,并且在其中 型号 有一个 SELECT 语句从订单表中获取 x 个订单并返回一个数组。为什么要这样做,如果在您的 Controller 您创建另一个循环来迭代该数组并将其分配给 查看 ;前任。 1?

ex. 1: foreach ($list as $order) { $this->view->set('order', $order); }



我想有人可以修改返回值,所以可能会出现这样的情况;前任。 2.

ex. 2: while ($order = $this->model->getOrders(10)) { $this->view->set('order', $order); }



我想我的论点是,当您可以简单地从您的 中进行必要的数据库调用时,为什么要创建一个模型? Controller ,假设您使用具有通用接口(interface)的数据库对象来访问您的数据,因为我怀疑大多数网站都在使用。是的,我不认为这对所有任务都是实用的,但是当大多数正在做的事情足够简单时,不一定需要单独的 型号 .

就目前而言,用户发出请求“www.mysite.com/Controller/action/args1/args2”,前端 Controller (我称之为路由器)传递给 Controller ​​(类)并在该 Controller 内执行特定操作(方法)被调用并从那里适当的 查看 创建然后输出。

最佳答案

所以我猜你想知道在数据库访问对象之上增加模型层的复杂性是否是你想要的方式。根据我的经验,简单性胜过任何其他问题,所以我建议如果你看到一个明确的情况,即完全没有模型并且数据访问发生在相当于 Controller 的情况下更简单,那么你应该这样做。

但是,进行 MVC 分离还有其他潜在的好处:

  • Controller 中根本没有 SQL:也许您决定从数据库以外的源( session 中的数组?用于测试的模拟对象?文件?只是其他东西)收集数据,或者您的数据库架构发生更改并且您必须查找您的代码必须更改的所有地方,您可以只查看模型。
  • 技能集的分离:也许您团队中的某个人擅长复杂的 SQL 查询,但不擅长处理 php 方面。那么代码分离得越多,人们就越能发挥他们的优势(在涉及到 html/css/javascript 方面的事情时更是如此)。
  • 表示数据 block 的概念对象:正如 Steven 所说,与数据库无关(因此如果需要,您可以在 mysql 和 postgresql 之间切换)和 所获得的好处是不同的。架构 不可知论(所以你有一个充满数据的对象,即使它来自不同的关系表)。当你有一个模型可以代表一个好的数据 block 时,你应该能够在多个地方重用该模型(例如,一个人模型可以用于登录和显示人员列表时)。

  • 我当然认为 MVC 任务分离的理想非常有用。但随着时间的推移,我开始认为替代风格,比如保持类似 MVC 的分离与函数式编程风格,在 php 中可能比完整的 OOP MVC 系统更容易处理。

    关于PHP MVC 和 SQL 减模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1313311/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com