我已经看到了将几乎所有与路由无关的代码传递给模型的代码。我还看到了代码,其中所有数据库持久性均由模型处理,但非DB处理由控制器处理。
哪种方法更好?
控制器和模型之间的界线实际上很清楚。
模型是您应用程序的心脏。它包含解决您的应用程序所针对的问题所需的业务/域逻辑。通常将模型分为其他几层,例如持久性,服务,域等。这是一个普遍的误解,认为模型只是数据库,这与普遍的误解是,数据库应该是ActiveRecord。
控制器(和视图)是表示层的一部分。控制器的唯一责任是接收和处理直接针对您的应用程序的用户输入,并将其委托给模型中的相应部分。而已。它不应处理复杂的应用程序流程或问题域的代码。模型不应该知道C或V,并且您应该能够将V和C换成其他表示层,而无需碰触M。