【问题标题】:How should I map model beans to view model beans in Spring MVC?我应该如何将模型 bean 映射到 Spring MVC 中的查看模型 bean?
【发布时间】:2011-11-21 16:02:12
【问题描述】:

在我的 Spring MVC 应用程序中,我们有 form 对象,这些对象由 JSP 中的 <form:form 标记映射到。这些对象与我的常规模型 bean 是分开的,并且真正形成了一种 视图模型。这些对象的困难在于这些对象与服务对象所期望的实际模型 bean 之间的映射。目前我们已经在控制器中手动编写了代码映射表单到 bean,反之亦然。这不是最优的,因为它需要大量的额外代码。我们考虑过的其他选项是。

  • 编写一个映射类。这仍然需要手动编写代码,但至少它不在控制器中。
    • 自动生成映射类。大概这需要手动生成和更新某种映射文件。
  • 将bean 和表单中的属性命名为相同的名称,并使用Spring 的BeanUtils.copyProperties 来回移动它们。这看起来很糟糕,因为它不是一个明显的链接,如果不保持一致会导致奇怪的运行时行为。
  • 将表单对象编写为 facade,在内部保留一个 bean 并对其进行更新。

执行此操作的项目长期健康的最佳方法是什么?

【问题讨论】:

  • 不确定这是属于这里还是属于程序员。如果合适,请随意移动。
  • 这是一个有趣的问题,我很想看到一些观点。我不得不承认我并不经常遇到这个问题,因为我的表单支持 bean 直接传递给我的服务。我倾向于更加务实,我并不总是遵循 N 层架构的最佳实践……但我认为很多好处都被夸大了。
  • 我希望这个问题有更多的答案。您的方法对我来说看起来完全正确,但是模型和视图模型之间的映射很乏味。将按照ayengin 的建议查看推土机。你是怎么解决这个问题的?

标签: forms spring-mvc viewmodel


【解决方案1】:

我建议您使用dozer 框架将域对象和视图对象相互映射。唯一的问题是您仍然必须手动创建视图类。您也可以通过代码生成来自动执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多