和其他许多人一样,我在理解 MVC 模式方面遇到了问题。更准确地说,让我们谈谈 Grail Web 应用程序。我的理解是模型是服务和域类。控制器的典型用法是(实际上对于这种特殊用法,我们可以直接从控制器调用 Person.get(id),但假设我们通过服务进行调用):
def getPerson(String id){
Person person = peopleService.get(id);
render(view: "person", model: person)
}
在这种情况下,服务方法返回了域对象,如果它是模型的一部分。但可能是服务方法不修改域对象或不修改它,而是返回布尔值。
def savePerson(Person p){
boolean saved = peopleService.save(p);
render(view: "actionresult", model: saved)
}
在这种情况下,布尔值不是模型的一部分,但是它在渲染方法中被命名为模型。
所以我有三个假设:
- 有两种模型:负责业务逻辑的应用层模型和用于渲染视图的数据
- MVC 完全是表现层模式,与业务逻辑层无关,在这种情况下,模型只是视图显示的数据
- 模型是服务层和域类,控制器通过服务方法调用触发模型更新,用于渲染视图的数据应该以某种方式表示模型状态,这就是为什么它在渲染函数中也称为模型
你怎么看待这件事?