Java SpringMVC:在服务层中使用表单是一种好的实践吗?
假设有一个应用程序在控制器层使用Java SpringMVC:在服务层中使用表单是一种好的实践吗?,java,spring,spring-mvc,Java,Spring,Spring Mvc,假设有一个应用程序在控制器层使用forms包和Form.java进行验证,因此每个需要验证的请求都有一个相应的Form.java类 这将导致控制器方法签名如下所示: TemplateController.java @PostMapping public Mono<SmsMessageTemplate> create(@Valid @RequestBody Mono<TemplateForm> templateForm) public Mono<SmsMessage
forms
包和Form.java
进行验证,因此每个需要验证的请求都有一个相应的Form.java
类
这将导致控制器方法签名如下所示:
TemplateController.java
@PostMapping
public Mono<SmsMessageTemplate> create(@Valid @RequestBody Mono<TemplateForm> templateForm)
public Mono<SmsMessageTemplate> create(TemplateForm formData) {...}
public Mono<SmsMessageTemplate> create(String template name, String templateText) {...}
@PostMapping
公共Mono创建(@Valid@RequestBody Mono templateForm)
还有一个服务层,其方法签名如下所示:
TemplateService.java
@PostMapping
public Mono<SmsMessageTemplate> create(@Valid @RequestBody Mono<TemplateForm> templateForm)
public Mono<SmsMessageTemplate> create(TemplateForm formData) {...}
public Mono<SmsMessageTemplate> create(String template name, String templateText) {...}
公共Mono创建(TemplateFormFormData){…}
也可以这样实施:
TemplateService.java
@PostMapping
public Mono<SmsMessageTemplate> create(@Valid @RequestBody Mono<TemplateForm> templateForm)
public Mono<SmsMessageTemplate> create(TemplateForm formData) {...}
public Mono<SmsMessageTemplate> create(String template name, String templateText) {...}
公共Mono创建(字符串模板名称,字符串模板文本){…}
哪条路更好?为什么?我认为将
表单
类传递给服务层可能是层概念的混合,人们应该将表单保存在控制器层,以便更好地理解传递的参数,而无需来回浏览类。我错过了什么吗?这些决定实际上取决于各种因素,例如:
-项目的复杂性和数量(是一个小型服务,还是一个成熟的CMS/ERPS等?)
- 您是否打算在其他模块/项目中重复使用该服务
- 您打算分发服务接口JAR吗? (然后您需要考虑模块,也许*Form对象甚至不在控制器端-您不想将控制器类分发给第三方客户端)
- 那么一个包含20个字段的表单呢?你肯定不会通过20次辩论
- 如果服务方法在复杂实体上执行CRUD,比如说用户,那么情况会怎样呢?您可能会有两个表单/验证(注册、编辑),并且可能有不同类型的用户,具有不同的选项,因此类型*操作表单。(在这种情况下,您可以考虑域域包中的用户域对象)和多个控制器侧窗体对象(您可能需要从窗体中填充用户对象)。
一般来说,如上所述,这是一个非常基于意见的问题,但在我看来,每个项目的总体复杂性和设想规模将影响您的最终决策。这听起来很像一个基于意见的问题。