有人能建议从控制器向服务层发送数据的最佳方法吗?
我有UI< - >控制器< - >服务< - >的DAO
我有模型(或命令)来保存用户在UI中输入的数据以传递给控制器
我想过在控制器层创建模型,但不想直接将它们作为服务层传递,而是依赖于控制器层。
您建议在服务层创建模型并在控制器层中使用它们吗?但在这种情况下,jsps将使用这些模型向用户提供数据?那可以吗?
有人能建议用java设计上面显示的mvc层的最佳方法吗?
由于 拉梅什
答案 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服务。 也许其他人有更好的方法来做到这一点。