Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC:在服务层中使用表单是一种好的实践吗?_Java_Spring_Spring Mvc - Fatal编程技术网

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,比如说用户,那么情况会怎样呢?您可能会有两个表单/验证(注册、编辑),并且可能有不同类型的用户,具有不同的选项,因此类型*操作表单。(在这种情况下,您可以考虑域域包中的用户域对象)和多个控制器侧窗体对象(您可能需要从窗体中填充用户对象)。

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

这听起来很像一个基于意见的问题。