【问题标题】:Spring MVC: is using forms in the service layer a good practice?Spring MVC:在服务层中使用表单是一种好习惯吗?
【发布时间】:2018-06-15 19:32:59
【问题描述】:

假设有一个应用程序在控制器层使用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 类传递给服务层可能会混合层概念,并且应该将表单保留在控制器层中,以便更好地理解传递的参数,而无需在类中来回导航。我错过了什么吗?

【问题讨论】:

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

标签: java spring spring-mvc


【解决方案1】:

此类决定确实取决于各种因素,例如: - 项目的复杂性和数量(它只是一个小服务,还是一个成熟的 CMS / ERPS 等?)

  • 您是否要在其他模块/项目中重复使用该服务

  • 您要分发服务接口 jar 吗? (然后你需要考虑模块,也许 *Form 对象甚至不会在控制器端 - 你不希望将控制器类分发给 3rd 方客户端)

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

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

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

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多