首页 > 解决方案 > DDD、JPA 和非默认构造函数

问题描述

DDD 说您的领域模型需要具有表现力并说出他们需要什么。考虑到这一点,我创建了以下类:

@Entity
public class User{
    @Id
    @GeneratedValue
    private Long id;

    private String userName;
    private String password;

    public User(String userName, String password) {
        /**set the values*/
    }

    /** Validations, getters and business methods*/

通过这个构造函数,我告诉我们构建一个新的 User 对象所需的最小值。

这种方法的问题在于 JPA 需要一个无参数的默认构造函数来通过反射来实例化类。在这种情况下,我必须忘记 DDD 的建议还是有解决方法?

标签: jpadomain-driven-design

解决方案


在您的特定情况下,您可以将非参数构造函数设为私有。但是很快另一个 JPA 要求将迫使您做出另一个解决方法;

voiceofunreason 给了你正确的答案。正确的方法是在基础设施/持久层中有一个适配器来接收您的域对象,然后将其转换为 JPA 贫血模型,反之亦然。

其他一些更适合没有太多转换的选项:

1 - Spring Data JDBC 正在尝试吸收聚合概念

2 - 将您的聚合作为 json 保存在关系数据库中。Vaughn Vernon 提出了一个实现 -> https://kalele.io/the-ideal-domain-driven-design-aggregate-store/

3 - 面向文档的数据库,例如https://www.mongodb.com/等等......


推荐阅读