我已经看到了代码,其中几乎所有与非路由相关的代码都被传递给模型。我还看到了代码,其中所有数据库持久性都由模型处理,但非DB处理由控制器处理。
哪种方法更好?
答案 0 :(得分:39)
控制器和模型之间的界限实际上很清楚。
模型是您应用的核心。它包含解决应用程序编写问题所需的业务/域逻辑。模型通常分层为几个其他层,例如持久性,服务,域等等。模型只是数据库是一种常见的误解,因为数据库应该是ActiveRecord是一种常见的误解。
控制器(和视图)是表示层的一部分。控制器的唯一责任是接收和处理针对您的应用程序的用户输入,并将其委托给模型中的相应部分。而已。它不应该处理复杂的应用程序流或问题域的代码。 You want controllers to be skinny and models fat with logic。模型不应该知道C或V,你应该能够将V和C替换为不同的表示层,而不必触摸你的M.
请参阅MVC Excerpt in Patterns of Enterprise Application Architecture