Dan*_*ugg 9 php model-view-controller model
我对过去几周/几个月的MVC类型架构的理解已经大大提升了(我会说),我非常感谢SO的爱好者们.所以谢谢!
我仍然受到某种挑战的挑战Model.到目前为止,我已整理并创建;
Request对象,它整合了请求数据(GET/POST/etc.参数,HTTP标头等)Response对象,用于收集响应数据(HTML,JSON,HTTP标头等)Router对正则表达式驱动的路由表解析URI 的想法,基于Controller文件/类存在/继承验证它们,并Request使用任何补充参数更新对象.Dispatcher对象,用于设置工作环境,创建和初始化必要的对象Controller,并将其Request与Response对象一起发送.现在了Model.
据我所知,在很多(有些)情况下,Model仅仅是代表性的它相关的实体,表,带有CRUD方法(addUser(),deleteUser()等),在另一些国家也有抽象的进一步水平,防止控制器访问进行更加细致的CRUD功能,巩固方法(replaceUser()- 删除,添加,然后返回用户数据)
我想知道我最好的行动方式是什么; 由于一些具体原因.
我创建了一个Gateway类,它充当预期的Model执行ACL检查的代理(使用Acl对象,特殊情况" Model"),使用Request所需的方法和参数作为检查的参数.该Controller负责确定失败的ACL检查的结果(显示所有但是该数据,重定向等等)
我还介绍了一个(我以前称之为混合REST/RPC,但我认为这是不正确的,因为我的资源URI架构是窗口外的)RPC API层.API调用由一个方法,参数和请求参数组成,由特殊管理,ApiController并像正常Model调用一样被馈送Gateway.
在我看来,这是促进数据访问的最佳方式,是一个(呃 - 哦)单个巨大的模型对象,忽略任何维护所有数据库交互方法的ORM,证明管理网关/ ACL /模型关系的简单性.不,这听起来不对.
鉴于这些建筑选择,我可能是建模我的最佳选择,嗯.. Model?我是否真的通过前面提到的设计选择谨慎和最佳实践?
也许这只是语义,但我想说模型是封装应用程序中实体的数据、类(以及扩展的对象)的表示。还有另一个缺失的部分,我将其称为持久性或数据访问层 (DAL)。MVC 作为一种抽象并不真正关心持久性,因为使用 MVC 模式进行开发实际上并不需要具有持久性。在(几乎?)所有使用 MVC 的 Web 应用程序中,您确实有一个数据库,因此确实需要一个持久层。持久层理解模型并使其可供控制器使用,但它实际上并不是模型的一部分。
如果将插入/检索/更新数据的概念分离到持久层中,那么剩下的就是封装应用程序实体表示的容器和关联的业务/验证逻辑。这些应该相对较小、重点突出,并且仅相互依赖于实体之间的实际数据依赖关系。这个小模型(每个实体一个)总共构成了您的应用程序的模型。您的持久层 (DAL/ORM) 也不是特别大,而是仅专注于与数据库交互以获取/存储模型。