Kat*_*esa 12 java genericdao playframework playframework-2.0
我们正在使用Play!HTTP会话的框架.
tenantId并且ipAddress是多个表中共有的列.
当用户登录时,我们都存储tenantId在HttpContextSession
每当我们需要用户的IP地址时,我们Http.Context.current().request().remoteAddress()用来存储IP地址.
我们编写了大量的查询,现在我们想以通用的方式保存或查询tenantId.
所有查询都通过GenericDao进行
我们可以在GenericDao中使用以下内容来获取租户ID,以便我们可以在所有查询中附加吗?
Http.Context.session().get("tenantId");
Run Code Online (Sandbox Code Playgroud)
保存或检索这些细节的最佳方法是什么?
谢谢.
您不希望 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。
| 归档时间: |
|
| 查看次数: |
325 次 |
| 最近记录: |