1

我正在使用带有spring的MVC,所以我想从我的控制器传递一些参数,这个字段从我的提交表单中获取,我的问题是传递这个字段的最佳方式是通过bean表单发送到服务或创建另一个bean。

    @Autowired
    RegisterServiceImpl registerServiceImpl;

    @RequestMapping(value="/registeruser", method = RequestMethod.POST )
    public String register( @ModelAttribute(value = "registerForm") RegisterForm registerForm , ModelMap model{

         //previous method extract each field from registerForm 
        //registerServiceImpl.registerUser(field1,field2,field3,fieldn);

        //actual method pass object registerForm
        registerServiceImpl.registerUser(registerForm);   

    }

问题是如果将 RegisterForm 传递给服务类会产生高耦合吗?o 使用成功低耦合的最佳实践的一些替代方法。

4

2 回答 2

1

RegisterForm 确实是一个 DTO,正如vivin-paliath 所提到的,您可能会在只有来自 DTO 的部分数据有用的情况下结束,因此需要转换器。

我建议使用 spring 提供的转换器,您只需要注册您的自定义实现,并且对转换服务的一次调用就可以使您的代码保持干净并与转换逻辑分离。

于 2013-07-26T20:18:01.487 回答
0

生成器是否RegisterForm会紧密耦合取决于您的用例。是RegisterServiceImpl#registerUser在多个地方使用吗?该RegisterForm类型也会从重用中受益吗?如果是这种情况,应该没有问题,您可以RegisterForm在控制器中用作命令对象。在这种情况下,RegisterForm实际上是一个 DTO。

但是,您最终可能会遇到RegisterForm包含永远不会来自视图的其他详细信息(可能由 中的其他方法使用RegisterServiceImpl)的情况,或者您需要对来自视图的数据执行某种翻译/转换。如果在很大程度上是这种情况,我通常会创建一个命令对象,然后将来自该对象的信息转换为一个实例,RegisterForm然后将其传递给服务。

于 2013-07-26T18:36:27.670 回答