Java Spring中的独立模型和UI视图模型(类似于Spring中的MVVM)

Java Spring中的独立模型和UI视图模型(类似于Spring中的MVVM),java,mvvm,spring-mvc,Java,Mvvm,Spring Mvc,我想在Spring3中开始讨论分离纯模型和UI模型 纯模型指的是我从数据库中检索的主要对象,比如说一些“用户帐户”。它包含足够的信息,可以在HTML视图中显示或将其传递给web服务 我所说的UI模型是指在UI中使用该对象所需的所有辅助工具。例如,如果“用户帐户”具有“状态”,则我需要从数据库中获取所有“状态”,例如,组合框。这些视图很复杂,在某些情况下,它们需要更多的信息,在另一些情况下,需要更少的信息。如果能够通过添加“全选”之类的项目来更改一些列表也会很好,这是纯UI的东西(从视图模板中不太

我想在Spring3中开始讨论分离纯模型和UI模型

纯模型指的是我从数据库中检索的主要对象,比如说一些“用户帐户”。它包含足够的信息,可以在HTML视图中显示或将其传递给web服务

我所说的UI模型是指在UI中使用该对象所需的所有辅助工具。例如,如果“用户帐户”具有“状态”,则我需要从数据库中获取所有“状态”,例如,组合框。这些视图很复杂,在某些情况下,它们需要更多的信息,在另一些情况下,需要更少的信息。如果能够通过添加“全选”之类的项目来更改一些列表也会很好,这是纯UI的东西(从视图模板中不太方便)

我听说有所谓的模型-视图-视图-模型模式,它似乎可以解决这些问题,但我从未尝试过它的实现

我现在使用的解决方案是将逻辑分成两个服务——一个用于纯模型,另一个用于UI模型。看起来是这样的:

@RequestMapping(value="app/user_accounts/{id}")
public String getUserAccount(@PathVariable("id") String id) {
    service.getUserAccount(id); // Gets main object and puts it into model
    presenter.formUserAccount(); // Gets all classifier for main object's properties
    return "user_account";
}
我不喜欢的是,视图及其所谓的视图模型彼此不相连。我可以调用presenter.formUserAccount()并返回完全不相关的视图名称

我看到的另一种方法类似于Spring控制器注释。我们有注释为@ViewModels的类和映射到视图名称的方法。拦截器在呈现某个视图之前查找并执行这些方法。这些看起来足够优雅,但需要大量的代码编写


如何解决这个问题?

我一直在Grails的上下文中考虑这个问题,Grails基于SpringMVC。我的方法是使用命令对象作为视图模型,因为它提供了视图模型中所需的数据绑定和验证功能。使用命令对象,您可以通过使用命令对象将视图属性映射到域对象,将“纯模型”(或域模型)从视图中抽象出来