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

标签 java spring hibernate web-applications dry

我有一个启用了 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/

相关文章:

java - 为什么今天有人会使用 Java 命令行选项 -Xrs?

java - Hibernate 查询@JoinColumn 和mappedBy

hibernate - Gorm使用复合键进行多对一映射

java - java中如何将右单引号转换为单引号

java - 如何判断 Hibernate 实体是否为只读

java - 在一定条件下从firebase数据库中检索数据

spring - 我应该使用最新版本的 Spring

java - Spring Data JPA 中的一对多关系

java - Spring 没有匹配类型的 bean,预计至少有 1 个 bean

java - hibernate 中的 OneToOne - 未知 "mappedBy"