代码之家  ›  专栏  ›  技术社区  ›  Ignas R

为什么这么多mvcweb框架喜欢将多个控制器操作分组在一个类中?

  •  10
  • Ignas R  · 技术社区  · 14 年前

    我的经验主要局限于PHP,但据我所知,Rails和ASP.NETMVC都走了同样的道路。

    create , edit , show 这些方法驻留在像PostsController这样的单个类中,但它们几乎不共享状态或依赖项,因为在整个请求期间只调用其中一个。

    这就是为什么对我来说这种方法看起来很不合理,因为类只充当某种名称空间。看到大量几乎不相关的控制器动作代码组成更大的控制器类的例子也没有帮助。然而,很多框架确实做到了这一点,只有少数框架为每个操作使用一个类。

    所以问题是,为什么会这样?也许这是主观的,但我相信我可能错过了这种方法的一个重要优势。

    2 回复  |  直到 14 年前
        1
  •  6
  •   Clayton    14 年前

    我认为MVC设计模式通常决定了这种构建控制器的方法。控制器的主要目的是在关联视图和需要与之交互的模型之间提供适当的“连接”,以及处理来自视图的输入所需的任何业务逻辑。控制器应该只是这些其他组件之间的一个薄层。 例如,Wikipedia对控制器的描述如下:

    控制器接收输入和 在模型对象上。控制器接受 来自用户的输入并指示 执行动作的模型和视口

    我同意其他非web环境中的控制器确实维护状态,但是在PHP中缺少状态的原因很简单,例如HTTP是无状态协议。在这种环境中使用MVC必然会导致控制器无法维护状态。

        2
  •  0
  •   Thomas Schuster    14 年前

    为什么这么多mvcweb框架喜欢将多个控制器操作分组在一个类中?

    这对于面向对象编程来说是非常重要的,从而形成一个适当分层的软件体系结构,其中控制器对象封装了关于域对象(模型)的所有职责。如果有PostModel,那么应该有一个PostController负责在域api上调用正确的业务方法,以满足用户请求并将结果推送到视图中。在我看来,为每一个可能的请求提供一个控制器类会导致一个过程结构体系结构。

    另一方面,如果您的控制器类中有太多的响应性,则应该将这些职责划分为多个控制器。这取决于你手头的应用程序,没有一个适合所有人的解决方案。每个控制器都应该负责域层上一组内聚的操作。