gpt4 book ai didi

java - builder 模式和持久化

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:42 25 4
gpt4 key购买 nike

我在项目的几个类中使用了构建器模式(多个参数,一些是必需的,一些是可选的,等等)。这些类是不可变的(没有 setter,集合 getter 的深层复制)。

我现在正尝试使用持久性框架将这些对象存储在数据库中,该框架使用默认构造函数 + setter 构造对象。它不太喜欢我的 Builders!

我不想将该设置降级为 POJO 并失去当前设计的优势(灵 active 、不变性、构造安全性)。

我欢迎任何有关可在这种情况下使用的解决方法的反馈(我可以包装这些类中的每一个,但这会使类的数量增加一倍,我宁愿避免这种情况)。

一个post实际上指出这是 Builder 模式的一个特定缺点。

编辑

一个answer建议使用私有(private)构造函数/ setter ,但只有在类的字段不是最终的时才有效,这不是我的情况。

最终编辑

感谢大家。
我认为我的最终解决方案看起来像这样并且工作正常(为了记录,我使用的是 MongoDB + Morphia):

class AClass {
private final String aField;
private final AClass() {
aField = "";
}
//Standard builder pattern after that - no setters (private or public)
}

最佳答案

正如我在评论中所说:您可以包含默认构造函数和所有必需的 setter ,但将它们设为私有(private)。通过这种方式,您可以保持对象的不变性,但 Hibernate 等 ORM 将能够在需要时访问方法/构造函数。

其他任何人也可以使用反射访问这些方法,但是他们也可以使用反射访问私有(private)成员变量。因此,添加私有(private)方法并没有真正的缺点。

关于java - builder 模式和持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9397544/

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