2

我有一个 @SessionScoped ApplicationBean 用于存储用户登录信息并将其成功注入到其他托管 bean 中,如此所述。

我也通过 @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 层?

4

2 回答 2

2

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

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

这使您的 Dao 独立于如何/从何处获取公司代码

于 2013-02-06T10:31:42.747 回答
2

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

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

于 2013-02-06T10:46:41.997 回答