2012-03-06 97 views
0

我有一個用Struts2 Spring3 JPA2和休眠編寫的應用程序。在這個程序,我有以下幾個層次:
- struts2的行動
- 春季服務
- 春天DAOstruts2 spring jpa layers best practices

所以,一個Struts動作呼籲它可以包含一個呼叫或多個DAO對象的服務。
爲了在屏幕上顯示信息,我爲實體創建了一些「鏡像」對象;即:EmailMessage實體有一個EmailMessageForm bean,用於顯示/收集webforms中的數據(我不知道這是否是最佳實踐),因此也是我的問題。
在EmailMessageServiceImpl我有一個名爲方法:

public List <EmailMessage> getEmailMessages(){ 
    //code here 
} 

,如果我把這從Struts動作,因爲會話已過期,我不能得到的依賴關係(我有交易的實體管理器)。所以,一個解決方案是創建另一個方法

List<EmailMessageForm> getEmailMessagesForDisplay() 
{ 
//.... 
} 

,並在這裏呼籲getEmailMessages()和轉換此形成物體。
你推薦我什麼?
這類問題的最佳做法是什麼?

回答

1

如果通過「依賴關係」指「延遲加載的對象」,IMO最好在觸擊視圖圖層之前獲取所有必需的數據。在你目前的體系結構中,它看起來像是一個檢索DTO的服務方法(「form bean」;由於很容易與Struts 1混淆,所以我毫不猶豫地使用這個術語)。

有人說在視圖過濾器/攔截器中使用Open Session會更好。這很容易,但如果視圖開發人員沒有注意,包括多個N + 1查詢等,可能會導致意想不到的後果。

+0

嗯,是的,依賴項是一些懶惰的加載對象。這就是我試圖完成的任務(在點擊視圖圖層之前獲取所有必要的數據)。因此,在服務層獲取數據的方法(使用dao對象),然後爲struts動作創建並返回dto是好的,對吧? – 2012-03-06 13:50:10

+0

我發現/使用推土機爲我做這個討厭的工作:) – 2012-03-07 08:38:11