MVC混乱; 排除模型责任和结构

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,并将其RequestResponse对象一起发送.

现在了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?我是否真的通过前面提到的设计选择谨慎和最佳实践?

tva*_*son 2

也许这只是语义,但我想说模型是封装应用程序中实体的数据、类(以及扩展的对象)的表示。还有另一个缺失的部分,我将其称为持久性或数据访问层 (DAL)。MVC 作为一种抽象并不真正关心持久性,因为使用 MVC 模式进行开发实际上并不需要具有持久性。在(几乎?)所有使用 MVC 的 Web 应用程序中,您确实有一个数据库,因此确实需要一个持久层。持久层理解模型并使其可供控制器使用,但它实际上并不是模型的一部分。

如果将插入/检索/更新数据的概念分离到持久层中,那么剩下的就是封装应用程序实体表示的容器和关联的业务/验证逻辑。这些应该相对较小、重点突出,并且仅相互依赖于实体之间的实际数据依赖关系。这个小模型(每个实体一个)总共构成了您的应用程序的模型。您的持久层 (DAL/ORM) 也不是特别大,而是仅专注于与数据库交互以获取/存储模型。

  • @Tomcat - 我不确定我是否理解您的描述,但我想说控制器使用持久层来存储/检索域模型,是的。我描述 Web 的 MVC 的方式是控制器响应并解释 HTTP 请求。他们从持久性介质中获取相关的领域模型,通常将其转换为特定于视图的模型,该模型可能包含比领域模型更多或更少的数据。他们选择要渲染的视图并将视图模型交给它。视图将数据呈现为 HTML 响应,然后发送回客户端。 (2认同)