2013-02-06 33 views
2

我有一個@SessionScoped ApplicationBean用於存儲用戶登錄信息併成功地將它注入到其他託管的bean中,正如告知here如何在DAO層使用會話變量?

我也使用我的Dao接口通過@ManagedProperty註釋,但我覺得我的用法有問題。

假設在用戶登錄時存在具有公共方法listStocks(String companyCode)和companyCode的StockDao存儲在ApplicationBean中。

所以我的託管bean調用這樣

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

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

DAO層這到處重複,其中SQL需要企業編碼。

我覺得這將是更好的,如果我的DAO層已經知道企業編碼(這意味着注入ApplicationBean中進入的DAO),我應該用我的方法,如下面

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

所以現在的問題是,這些API設計更好,如果你爲第二個投票,我怎樣才能將@SessionScoped beans注入到DAO層?

回答

2

對我來說第一種方法是更乾淨, 我不想綁定DAO層與會話管理bean。

我把我的一般文物尤其是DAOS幷包裝成一個單獨的Jar數據模型,無需任何外部依賴 這樣我可以用同樣無需做任何修改無論是Web應用程序,獨立式或EJB

這使您的Dao獨立於公司代碼從何處/如何取得

2

您不使用DAO層中的會話變量。缺乏業務邏輯和用戶界面問題正是DAO的原因:一個負責抽象數據訪問的層。

如果添加會話相關狀態,您將把DAO層變爲DAAMUIS層(無處不在的層)。我並不是說DAAMUIS是錯誤的或邪惡的,只是這個問題需要改寫。