java - Spring 中的独立模型和 UI View 模型(类似于 Spring 中的 MVVM)

标签 java mvvm spring-mvc

我想开始讨论在 Spring 3 中分离纯模型和 UI 模型。

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

我所说的 UI 模型是指我在 UI 中使用该对象所需的所有辅助内容。例如。如果“用户帐户”具有“状态”,那么我需要从数据库中获取所有“状态”,例如组合框。这些观点很棘手,在某些情况下它们需要更多信息,而在其他情况下则需要更少的信息。如果能够通过添加诸如“全选”之类的项目来更改某些列表,那将是很好的选择,这是纯 UI 的东西(并且不是很方便地从 View 模板中完成)。

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

我现在使用的解决方案是将逻辑分为两种服务 - 一种用于纯模型,一种用于 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";
}

我不喜欢的是 View 和它所谓的 View 模型没有相互关联。我可以调用 presenter.formUserAccount() 并返回完全不相关的 View 名称。

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

你会如何解决这个问题?

最佳答案

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

关于java - Spring 中的独立模型和 UI View 模型(类似于 Spring 中的 MVVM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4533596/

相关文章:

java - 为什么在类似搜索期间将 lower 添加到 hibernate 查询中

java - 如何在tomcat中部署和运行javafx应用程序

c# - MVVM 光 5.0 : How to use the Navigation service

c# - Windows MVVM中的通用应用程序

.net - 可用的 MVVM 框架所需的部分

java - JSR-303 和 Spring MVC 绑定(bind)结果

java - 如何将使用标准获取的标准数据插入 hibernate 中的另一个表

java - 显示最终解,显示小数点后 2 位

java - 在方法中返回类的实例

java - 创建名称为 'countriesDao' 的 bean 时出错 : Injection of autowired dependencies failed;