【问题标题】:How to use session variables in DAO layer?如何在 DAO 层使用会话变量?
【发布时间】:2013-01-21 11:15:42
【问题描述】:

我有一个@SessionScoped ApplicationBean 用于存储用户登录信息并将其成功注入到其他托管 bean 中,正如 here 所告知的那样。

我也通过@ManagedProperty 注释使用我的Dao 接口,但我觉得我的用法有问题。

假设有一个StockDao,它有一个公共方法listStocks(String companyCode),并且companyCode在用户登录时存储在ApplicationBean中。

所以我的托管 bean 像这样调用 DAO 层

@ManagedProperty(value = "#{appBean}")
ApplicationBean appBean;

public void getStockList() {    
    return stockDao.listStocks(appBean.getCompanyCode());       
}

这在 sql 需要 companyCode 的任何地方重复。

我觉得如果我的 DAO 层知道 companyCode(这意味着将 ApplicationBean 注入 DAO)会更好,我应该使用下面的方法

public void getStockList() {    
    return stockDao.listStocks();       
}

所以问题是,哪个 API 设计会更好,如果您投票支持第二个,我如何将 @SessionScoped bean 注入 DAO 层?

【问题讨论】:

    标签: java spring jsf-2


    【解决方案1】:

    对我来说,第一种方法更干净, 我不想将 DAO 层与会话托管 bean 联系起来。

    我将我的一般工件特别是 daos 和数据模型打包为单独的 Jar ,没有任何外部依赖项 这样我就可以在不做任何修改的情况下使用它,无论是 Web App、Stand Alone 还是在 EJB 中

    这使您的 Dao 独立于公司代码的获取方式/位置

    【讨论】:

      【解决方案2】:

      您不在 DAO 层中使用会话变量。缺乏业务逻辑和用户界面正是它的原因所在:DAO:一个仅负责抽象数据访问的层。

      如果您添加会话相关状态,您会将您的 DAO 层转变为 DAAMUIS 层(无处不在的数据访问和其他用户界面材料层)。我并不是说 DAAMUIS 是错误的或邪恶的,只是这个问题需要重新表述。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-02
        • 2017-08-29
        • 2017-04-06
        • 2013-12-19
        • 1970-01-01
        • 1970-01-01
        • 2014-07-11
        • 1970-01-01
        相关资源
        最近更新 更多