【发布时间】:2011-07-18 20:07:35
【问题描述】:
在过去的几周/几个月里,我对 MVC 类型架构的理解有了很大的进步(我想说),我要感谢 SO 爱好者们;所以,谢谢!
尽管如此,我仍然受到Model 的挑战。至此我已经整理并创建了;
- 一个简单的
Request对象,用于整合请求数据(GET/POST/等参数、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。
在我看来,促进数据访问的最佳方式是(uh-oh)单个巨大的模型对象,不考虑任何 ORM,维护所有数据库交互方法,证明简单管理网关/ACL/模型关系。 不,这听起来不对。
鉴于这些架构选择,我的最佳选择可能是对我的,嗯..Model 建模?上述的设计选择是否真的把谨慎和最佳实践抛在了脑后?
【问题讨论】:
-
模型应该只作为你的数据提供者的代理,并且应该只被控制器或视图访问,如果其中任何一个是错误的,那么你应该重组你的代码,使它适合这个安排。
-
@RobertPitt; 这基本上就是我正在做的事情(打算)。
PageController对Gateway说“给我用户列表”。Gateway基于身份验证说“Yay”或“Nay”。如果是“Yay”,它将方法调用转发到提议的Model,并且所述方法验证并返回一个数据集,Controller最终发送到View进行渲染。 API 调用是一样的,除了ApiController而不是PageController并且每个方法调用都是单独请求并通过Gateway发送的,以 JSON 形式返回而不是View。 -
我想的问题是我的页面控制器不以任何方式表示实体。在我的方法中,
User_Model旁边没有User_Controller。页面控制器比这更抽象,代表视图的意图,而不是关联的模型。 -
有个东西叫View Model,可以和Domain Model不同
标签: php model-view-controller model