php – 我在哪里将数据库查询放入MVC?
最近几天,我在
PHP中广泛阅读有关OOP和MVC的书籍和网页,这样我就可以成为更好的程序员.我对MVC的理解遇到了一些问题:
我在哪里放一个mysql_query? 我应该将它放在控制器中并在基于提供的查询返回数据的模型上调用方法吗?或者我应该把它放在模型本身?这两种选择我都提供完全垃圾吗?
关于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(ModelMappersUser::class); $user = $this->entityFactory->build(ModelEntitiesUser::class); $user->setId(42); $mapper->fetch($user); if ($user->isBanned() && $user->hasBannExpired()){ $user->setStatus(ModelMappersUser::STATUS_ACTIVE); } $mapper->store($user); 如您所见,域对象甚至不知道它存储的信息.并且它都没有关于您放置数据的位置.它可以存储在MySQL或PostgreSQL或某些noSQL数据库中.或者可能推送到远程REST API.或者也许映射器是用于测试的模拟器.要替换映射器,您需要做的就是为不同的工厂提供此方法. 另外,请看这些相关的帖子: > understanding MVC Views in PHP (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |