gpt4 book ai didi

java - 具有 DTO 和 EO 的 DRY 原则,用于启用 spring 和 hibernate 的 webapp

转载 作者:行者123 更新时间:2023-11-30 07:07:11 25 4
gpt4 key购买 nike

我有一个启用了 spring 和 hibernate 的 Web 应用程序

我有一个用户注册类:

public class SignUpDto {

@NotBlank
@Length(min = 1, max = 50)
private String firstName;

@NotBlank
@Length(min = 1, max = 50)
private String lastName;

@NotBlank
@Length(min = 1, max = 100)
@Email
private String email;

@NotBlank
@Length(min = 8, max = 15)
private String password;

@NotBlank
@Length(min = 8, max = 15)
private String confirmPassword;

@NotBlank
@Length(min = 10, max = 12)
@Phone
private String phone;

@NotNull
private UserType userType;
....

和相应的 hibernate 实体对象是:

@Entity
@Table(name = "user")
public class UserEo extends BaseEo {

private static final long serialVersionUID = 1L;

public UserEo() {
}

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "use_id")
private Long id;

@Column(name = "use_title")
private String title;

@Column(name = "use_name")
private String name;

@Column(name = "use_email")
private String email;

@Column(name = "use_password")
private String password;

@Column(name = "use_type")
private String type;

@Column(name = "use_registered")
private Timestamp registered;

@Column(name = "use_phone")
private String phone;
...

所以我担心的是代码字段/setters/getters 在 DTO 和 EO 中被重复,这违反了 DRY 原则

有什么解决这个问题的建议吗?

谢谢苏雷什

最佳答案

这是使用 DTO 模式时的常见问题,简短的回答是,在您的特定情况下,您可以做的事情不多(有什么?)。现在为更长的答案:

DTO 模式做了两件事 - 一是将您的 API(例如 REST/SOAP API)与您的实现分离。其次,它允许您仅传输消费者所需的信息,而不管您的实现如何。域模型也可以作为构建 DTO 的一部分进行操作。

您的实现具有这两个优点,即使底层实现(您的数据库表)发生变化,您也可以更轻松地维护您的 API 接口(interface)。

一种天真的方法是将实体对象也用作 DTO。这通常是行不通的,因为它违反了上述原则。如果实体利用延迟加载,技术上也有难度。

关于java - 具有 DTO 和 EO 的 DRY 原则,用于启用 spring 和 hibernate 的 webapp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25096388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com