Ign*_*s R 10 php model-view-controller
我的经验主要限于PHP,但据我所知,Rails和ASP.NET MVC都走同样的道路.
问题的关键是,几乎所有的Web框架,我曾经遇到过实现控制器动作作为方法,例如create,edit,show等,这些方法存在于像PostsController一个类,但他们几乎没有共享状态或依赖关系,因为只有其中的一个在整个请求期间被调用.
这就是为什么这个方法看起来很不合理,因为这个类只是作为某种命名空间.查看包含大块几乎没有相关的控制器动作代码的示例组成更大的控制器类也无济于事.然而,许多框架都是这样做的,只有少数框架为每个动作使用一个类.
所以问题是,为什么会这样呢?也许这是主观的,但我相信我可能错过了这种方法的一个重要优势.
我认为MVC设计模式通常决定了这种构建控制器的方法.控制器的主要目的是在相关视图与其需要交互的模型之间提供适当的"连线",以及处理视图输入所需的任何业务逻辑.控制器应该只是这些其他组件之间的薄层.例如,Wikipedia将控制器描述如下:
控制器接收输入并通过调用模型对象来启动响应.控制器接受来自用户的输入,并指示模型和视口基于该输入执行操作.
我确实同意其他非Web环境中的控制器确实维护状态,但例如,PHP中缺少状态的原因仅仅是HTTP是无状态协议.在此环境中使用MVC本身会导致控制器无法维护状态.