php – 我在哪里将数据库查询放入MVC?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 我在哪里将数据库查询放入MVC?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
最近几天,我在 PHP中广泛阅读有关OOP和MVC的书籍和网页,这样我就可以成为更好的程序员.我对MVC的理解遇到了一些问题:

我在哪里放一个MysqL_query?

应该将它放在控制器中并在基于提供的查询返回数据的模型上调用@L_406_5@吗?或者我应该把它放在模型本身?这两种选择我都提供完全垃圾吗?

关于MVC主题的材料

你可能已经列出了你正在阅读的书籍,因为大多数(如果不是全部)涉及MVC的书籍都是错误的.

如果你想成为一个更好的开发者,我建议你从Marting Fowler – GUI Architectures文章开始.接着是同一本书的作者–“Patterns of Enterprise Application Architecture”.然后下一步将是你研究SOLID principles并理解如何编写代码Law of Demeter之后.这应该涵盖基础=]

我可以在PHP中使用MVC吗?

并不是的.至少不是经典的MVC,因为它是defined for Smalltalk.

相反,在PHP中,您有另外4个针对相同目标的模式:MVC Model2,MVP,MVVM和HMVC.再说一次,我懒得再写一次差异,所以我只是链接到我的old comment.

什么是模特?

首先要注意的是MVC中的Model不是类或对象.它是一个包含多个类的层.基本上模型层是所有层组合的(但是,第二层应该称为“域对象层”,因为它包含“域模型对象”).如果您想阅读有关模型层各部分所包含内容快速摘要,可以尝试阅读this old comment(跳到“侧注”部分).

图片取自Fowler网站上的Service Layer文章.

控制器做什么?

Controller在MVC中有一个主要职责(我将在这里讨论Model2实现):

它通常具有次要责任:将结构从模型层绑定(或以其他方式传递)到视图,但如果您遵循SRP,它将成为一个可疑的实践

我在哪里放置sql相关代码

信息的存储和检索在数据层处理,通常实现为DataMapper(不要与滥用该名称的ORM混淆).

以下是它的简化使用方式:

$mapPEr = $this->;mapperFactory->build(Model\Mappers\User::class);
$user = $this->entITyFactory->build(Model\Entities\User::class);

$user->setId(42);
$mapper->fetch($user);

if ($user->isBanned() && $user->hasBannExpired()){
    $user->setstatus(Model\Mappers\User::STATUS_ACTIVE);
}

$mapper->Store($user);

如您所见,域对象甚至不知道它存储的信息.并且它都没有关于您放置数据的位置.它可以存储在MysqL或Postgresql或某些nosql数据库中.或者可能推送到远程REST API.或者也许映射器是用于测试的模拟器.要替换映射器,您需要做的就是为不同的工厂提供此方法.

另外,请看这些相关的帖子:

> understanding MVC Views in PHP
> testable Controllers with dependencies
> how should services communicate between each other?
> MVC for advanced PHP developers

脚本宝典总结

以上是脚本宝典为你收集整理的php – 我在哪里将数据库查询放入MVC?全部内容,希望文章能够帮你解决php – 我在哪里将数据库查询放入MVC?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。