将数据从Spring MVC控制器来回传递到服务层

时间:2014-02-27 21:41:24

标签: java spring spring-mvc model-view-controller controller

有人能建议从控制器向服务层发送数据的最佳方法吗?

我有UI< - >控制器< - >服务< - >的DAO

我有模型(或命令)来保存用户在UI中输入的数据以传递给控制器​​

我想过在控制器层创建模型,但不想直接将它们作为服务层传递,而是依赖于控制器层。

您建议在服务层创建模型并在控制器层中使用它们吗?但在这种情况下,jsps将使用这些模型向用户提供数据?那可以吗?

有人能建议用java设计上面显示的mvc层的最佳方法吗?

由于 拉梅什

2 个答案:

答案 0 :(得分:3)

将域模型对象直接提供给UI层并不一定是错的,只是你很快就会遇到一些常见的问题:

  • 视图屏幕只需要模型的一小部分
  • 某些字段,例如您永远不想发送到视图层的User.password
  • 域模型可以包含loops,表示对象图中返回初始对象的对象导航路径。这无法正确序列化
  • 由分离的对象引起的域模型上的延迟初始化异常

解决此问题的常见模式是DTO模式,请参见description by Martin Fowler

在较大的应用程序中使用它的常用方法是让控制器发送和接收DTO,然后根据需要进行一些映射以将它们转换为域对象,这可以通过例如Dozer mapping library来完成。

在较小的应用程序上,这可能是不合理的,特别是如果您没有遇到上述问题,尽管这些问题往往会频繁出现。

答案 1 :(得分:0)

控制器从UI获取输入并将传递MVC模式中的请求转发(因此称为Controller)。但是既然你正在使用Spring MVC,为什么不在Spring上下文中创建模型对象并使用它们是你的服务层?您可以在服务层中使用@Resource或@Autowired。此外,如果要重用模型对象,可以轻松地执行此操作,因为这样它们不会锁定到特定层。例如,使用您的上下文的Web服务。 也许其他人有更好的方法来做到这一点。