如何在GenericDao中检索公共值(IpAddress,TenantId)?

Kat*_*esa 12 java genericdao playframework playframework-2.0

我们正在使用Play!HTTP会话的框架.

tenantId并且ipAddress是多个表中共有的列.

当用户登录时,我们都存储tenantIdHttpContextSession

每当我们需要用户的IP地址时,我们Http.Context.current().request().remoteAddress()用来存储IP地址.

我们编写了大量的查询,现在我们想以通用的方式保存或查询tenantId.

所有查询都通过GenericDao进行

我们可以在GenericDao中使用以下内容来获取租户ID,以便我们可以在所有查询中附加吗?

Http.Context.session().get("tenantId");
Run Code Online (Sandbox Code Playgroud)

保存或检索这些细节的最佳方法是什么?

谢谢.

Jos*_*lle 1

您不希望 DAO 必须依赖于表示层事物(例如 HTTP 会话)。我建议使用抽象来隐藏这些细节。

创建一个名为 TenantIdProvider 的接口并将其注入到您的 DAO 中。它看起来像这样:

public interface TenantIdProvider
{
    String getTenantId();
}
Run Code Online (Sandbox Code Playgroud)

然后创建一个名为 HttpSessionTenantIdProvider 的实现。

class HttpSessionTenantIdProvider implements TenantIdProvider
{
    @Override
    public String getTenantId()
    {
        return Http.Context.session().get("tenantId");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您的 GenericDAO 可以引用 TenantIdProvider,并且每个需要tenantId 的查询都可以通过 TenantIdProvider 获取它,并且不依赖于播放框架或您使用的任何其他表示层。

如果您最终有运行和发送通知或其他任务的预定作业,并且它们使用此 DAO,那么这确实变得很重要。如果此 DAO 依赖于 HTTP 会话,则这是不可能的。您的工作应用程序可以创建一个仅返回“系统”或类似内容的 TenantIdProvider。