gpt4 book ai didi

java - 定义行动和目标的设计模式

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

我有一个 GenericDAO,它将其操作委托(delegate)给 DataSource 类

public class BaseDAOImpl<T> implements BaseDAO<T> {     
DataSource ds;

public T update(T entity) {
ds.update(entity);
}

我现在遇到的问题是我们希望它能够与多个数据源一起使用。这给我留下了两种选择

1)在DAO中为数据源创建一个setter并在每次操作之前使用它

2) 根据数据源数量创建 BaseDAO 的每个子级 n 次

我希望 DataSource 脱离 DAO,但是如何将操作委托(delegate)给它?

最佳答案

我猜你想实现 Multi-Tenancy 之类的东西:当请求来自用户 A 时,参与处理该请求的所有 DAO 都应该与用户 A 的 DataSource 通信。 ,等等。

如果是这样,DataSource是您请求的上下文的一部分,存储此类上下文数据的一种可能的选择是使用 ThreadLocal :

  • 当请求到来时,您可以输入适当的 DataSource进入ThreadLocal
  • 所有 DAO 均获得 DataSource从那ThreadLocal .
    显然,为了单一职责原则,最好将此逻辑隐藏在工厂后面并将该工厂注入(inject)到您的 DAO 中,以便 DAO 调用 factory.getCurrentDataSource()对于每个操作。
  • 清除ThreadLocal当您完成请求的处理时。

请注意,只有当每个请求都由单个线程处理时它才有效。

关于java - 定义行动和目标的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10696828/

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