【问题标题】:Is using a domain object as a form-backing object in Spring MVC a bad practice?在 Spring MVC 中使用域对象作为表单支持对象是一种不好的做法吗?
【发布时间】:2018-02-23 09:37:27
【问题描述】:

在 Spring MVC 中使用 Event 的实例作为表单支持对象是一种不好的做法吗?

与 DTO 相比,这种方法的一个问题是客户端可以更改视图中的隐藏字段,并且您需要检查并重置它们。 但是还有其他的吗?

@Entity
@Table(name = "events")
public class Event
    {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "event_id")
    public int id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    public User userId;

    @Column(name = "amount")
    @NotEmpty(message = "Amount can't be empty")
    public int amount;

    @Column(name = "description")
    @NotEmpty(message = "Description can't be empty")
    public String description;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "entered_by")
    public User enteredBy;

    @Column(name = "entered_at", columnDefinition = "DATETIME")
    @Temporal(TemporalType.TIMESTAMP)
    public Date enteredAt;

    }

【问题讨论】:

  • 当然不好,你说的是哪个隐藏字段
  • 隐藏字段是指。对于那些不包含在 HTML 模板中但可以由客户端插入的模板也是如此。

标签: java spring forms spring-mvc dto


【解决方案1】:

如您所说,DTO 的主要目标是隔离。 您并不总是希望客户端查看/访问您在数据库端拥有的所有字段。

此外,您可以使用 DTO 聚合来自各种表/服务的多个调用,并通过一个表单对象将其返回到客户端。

【讨论】:

  • 我听到一个建议,如果你的类只有 setter 和 getter(即没有复杂的逻辑),你可以将它们作为 DTO 重用。我对单独 DTO 的主要问题是您必须复制大部分已定义的类。这就是为什么我想了解这种重用域对象的方法是否还有其他缺点。
猜你喜欢
  • 2012-03-25
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
相关资源
最近更新 更多