我有一个@SessionScoped ApplicationBean,用于存储用户登录信息,并按照here成功将其注入其他托管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层?
答案 0 :(得分:2)
对我来说,第一种方法更清洁, 我不想将DAO层与会话管理bean绑定。
我将我的一般工件特别是daos和数据模型打包为一个单独的Jar,没有任何外部依赖 这样我就可以使用相同的方法,无论是Web应用程序,独立还是EJB
这使您的Dao与
中提取公司代码的方式/位置无关答案 1 :(得分:2)
您不在DAO层中使用会话变量。缺乏业务逻辑和用户界面问题正是DAO的一个原因:一个负责抽象数据访问的层。
如果添加与会话相关的状态,则会将DAO层转换为DAAMUIS层(无处不在的数据访问和其他用户界面的东西层)。我并不是说DAAMUIS是错的还是邪恶的,只是这个问题需要改述。