Spring MVC:在服务层使用表单是一种很好的做法吗?

时间:2018-06-15 19:32:59

标签: java spring spring-mvc

假设有一个应用程序在控制器层中使用forms包和<whatever>Form.java进行验证,因此每个需要验证的请求都有一个相应的<requestName>Form.java类。

这导致控制器方法签名如下所示:

TemplateController.java

@PostMapping
public Mono<SmsMessageTemplate> create(@Valid @RequestBody Mono<TemplateForm> templateForm)

然后有一个服务层,方法签名如下所示:

TemplateService.java

public Mono<SmsMessageTemplate> create(TemplateForm formData) {...}

也可以像这样实现它:

TemplateService.java

public Mono<SmsMessageTemplate> create(String template name, String templateText) {...}

哪种方式更好,为什么?我认为将Form类传递给服务层可能是层概念的混合,并且应该在控制器层中保留表单,以便更好地理解传递的参数,而无需来回导航类。我想念一下吗?

1 个答案:

答案 0 :(得分:1)

这些决定完全取决于各种因素f.e: - 项目的复杂性和数量(它只是一个小型服务,还是一个完整的CMS / ERPS等?)

  • 您打算在其他模块/项目中重复使用该服务

  • 你打算发布服务接口jar吗? (那么你需要考虑模块,也许* Form对象甚至不在控制器端 - 你不希望将控制器类分发给第三方客户端)

  • 包含20个字段的表单怎么样?你肯定不会传递20个参数

  • 对于复杂实体(例如用户)执行CRUD的服务方法的情况如何?您可能会有几个表单/验证(注册,编辑),也许还有不同类型的用户具有不同的选项,因此类型*操作表单。 (在这种情况下,您可以考虑用户域对象(在域包中)和多个控制器端表单对象(您可能需要从/向表单填充用户对象)。

一般来说,如上所述,这是基于意见的,但在我看来,每个项目的总体复杂性和设想的大小将影响您的最终决定。