gpt4 book ai didi

java - Dao 注册表重构

转载 作者:行者123 更新时间:2023-12-01 15:35:22 24 4
gpt4 key购买 nike

使用通用 dao 模式,我定义通用接口(interface):

public interface GenericDao<T extends DataObject, ID extends Serializable> {
T save(T t);
void delete(ID id);
T findById(ID id);
Class<T> getPersistentClass();
}

然后,我实现了一个默认的 GenericDaoImpl 实现,以使用以下构造函数执行这些功能:

public GenericDaoImpl(Class<T> clazz) {
this.persistentClass = clazz;
DaoRegistry.getInstance().register(clazz, this);
}

DaoRegistry 的作用是通过关联到 Dao 的类来查找它。这允许我扩展 GenericDaoImpl 并覆盖需要特殊处理的对象的方法:

DaoRegistry.getInstance().getDao(someClass.getClass()).save(someClass);

虽然它有效,但有一些我不喜欢的地方:

  • DaoRegistry 是一个单例
  • 调用save的逻辑比较复杂

有更好的方法吗?

编辑我不想争论 Singleton 是否是 anti-pattern或不。

最佳答案

首先,DaoRegistry 单例有什么问题?

无论如何,您可以为您的实体拥有一个抽象基类,它会像这样实现保存

public T save(){
DaoRegistry.getInstance().getDao(this.getClass()).save(this);
}

然后你可以简单地调用someEntity.save()

或者,如果实体类本身实现了整个 GenericDao 接口(interface)(保存、删除和查找方法),则可能会更简单,因此 GenericDaoImpl 的内容将是在实体的基类中。

关于java - Dao 注册表重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8944476/

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